我正在使用带有扩展GcmListenerService的侦听器的GcmReceiver。 在我的onMessageReceived方法中,我想下载一个远程图像(使用Picasso lib),一旦下载了图像,就向用户发布通知。
代码:
public class MainGcmListenerService extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data) {
String urlImage = data.getString("image_url");
final Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) ...... // build a notification with the downloaded image as a logo
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(notificationType.getValue(), mBuilder.build());
}
};
Handler uiHandler = new Handler(Looper.getMainLooper());
uiHandler.post(new Runnable() {
@Override
public void run() {
Picasso.with(context).load(urlImage)
.into(target);
}
});
此代码在大多数情况下运行良好,但有时通知不会发布。我假设这是由于GCM消息线程在下载映像任务完成之前被杀死的事实。在GcmListenerService中实现此类流程的正确方法是什么(在onMessageReceived中下载图像,然后在完成后发布通知)?
答案 0 :(得分:0)
很难提供明确而完整的答案。毕加索的工作方式,也可能取决于接收设备的互联网连接,仍然有可能导致该过程被杀死。
我会在您的情况下做的是在客户端应用中使用默认图像以用于Notification
,如果在特定时间内已经过去且图像仍未下载完全,只是为了确保显示Notification
。
对此过程非常感兴趣。祝好运。干杯! :d