【问题标题】:For GcmListenerService is onMessageReceived background?对于 GcmListenerService 是 onMessageReceived 背景?
【发布时间】:2016-03-15 19:40:47
【问题描述】:
当我扩展GcmListenerService 时,onMessageReceived 是在后台进程中运行还是在 UI 线程上运行?我需要知道是否可以在不使用 asyncTask 等的情况下在方法主体内进行网络调用。
我查看了源代码,果然它是一个没有处理程序的普通服务。但是有一些关于 THREAD_POOL_EXECUTOR 的代码和一些明显混淆的东西。
【问题讨论】:
标签:
android
google-cloud-messaging
gcmlistenerservice
【解决方案1】:
当我扩展 GcmListenerService 时,onMessageReceived 是否在一个
后台进程还是在 UI 线程上?我需要知道我是否可以
在方法主体内进行网络调用而不使用 asyncTask
之类的。
是的,您可以在 onMessageReceived() 方法中进行网络调用,因为它在后台进程中运行。例如,您可以在此方法中下载图像,然后使用大图通知样式将其显示在通知上。
【解决方案2】:
简单判断当前线程是否为主UI线程
boolean isMain = Looper.getMainLooper().getThread() == Thread.currentThread();
放在onMessageReceived 方法中表示它在后台进程中运行(answer 类似问题)。
【解决方案3】:
服务未在 Ui / 主线程上运行。
即使应用程序关闭,服务也可以运行(在后台),这样您可以获得推送通知,在接收到推送时监听调用的意图并使用它来唤醒您的应用程序。