【问题标题】: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 / 主线程上运行。

        即使应用程序关闭,服务也可以运行(在后台),这样您可以获得推送通知,在接收到推送时监听调用的意图并使用它来唤醒您的应用程序。

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-04
        • 1970-01-01
        • 2013-08-10
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        相关资源
        最近更新 更多