当我扩展GcmListenerService
时,onMessageReceived
是在后台进程中运行还是在UI线程上运行?我需要知道是否可以在方法体内进行网络调用而不使用asyncTask等。
我查看了源代码,确定它是一个没有处理程序的vanilla服务。但是有一些关于THREAD_POOL_EXECUTOR和一些显然混淆的东西的代码。
答案 0 :(得分:1)
当我延长
GcmListenerService
时,onMessageReceived
正在运行 后台进程还是在UI线程上?我需要知道我是否可以 在不使用asyncTask的情况下在方法体内进行网络调用 或者这样。
是的,您可以在onMessageReceived()
方法内进行网络调用,因为它在后台进程中运行。例如,您可以使用大图像通知样式在通知中显示此图像之前下载图像。
答案 1 :(得分:0)
简单检查以确定当前线程是否是主UI线程
boolean isMain = Looper.getMainLooper().getThread() == Thread.currentThread();
放置在onMessageReceived
方法内的表示它正在后台进程(answer中运行到类似问题)。
答案 2 :(得分:-1)
服务未在Ui /主线程上运行。
即使应用程序关闭,服务也可以(在后台)运行,这样您就可以获得推送通知,听取接收推送时调用的意图并使用它来唤醒您的应用。