应用关闭后,FirebaseMessagingService不会保留在内存中

时间:2018-12-07 23:16:31

标签: android firebase firebase-cloud-messaging

我以为我所有的应用程序都通过了初始测试,因此我已经完成了从GCM到FCM的转换。但是,随后的beta测试表明它们都有相同的问题。我将以消息传递应用程序为例。 。

消息传递应用程序使用数据消息。在列表服务中接收到消息后,如果该应用程序正在运行,则会将其发布到对话线程中。如果该应用未运行,则接收电话上会发布一条通知,并将传入消息添加到对话数据存储中。

问题在于应用程序关闭后,myFCMListenerService一两个小时后停止工作。我们在GCM上使用的旧的GcmBroadcastReciver始终可以永远工作-几天,几个月。

退出工作后,将发生以下情况。 。

  1. 单步执行代码,侦听器永远不会收到消息。
  2. NullPointerException由空对象上的Context.getPackageName()发生

项目中唯一的getPackageName()方法位于LicenseValidator.java和iabHelper.java中。毫无意义。

这是确切的错误,通常在关闭应用程序后约一个小时出现,并且通常在fcmlistener收到第6条消息左右。确实会在收到消息时发生,但是逐步调试显示侦听器服务从未收到引起异常的消息。

  

12-09 18:18:12.323 13569-13591 / com.deanblakely.SafeTalk.debug   E / AndroidRuntime:严重例外:Firebase-MyFcmListenerService       进程:com.deanblakely.SafeTalk.debug,PID:13569       java.lang.NullPointerException:尝试在null上调用虚拟方法'java.lang.String android.content.Context.getPackageName()'   对象参考           在android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java:537)           在android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:526)           在com.deanblakely.SafeTalk.SPHelper.getSharedPreferences(SPHelper.java:14)           在com.deanblakely.SafeTalk.SPHelper.getTempString(SPHelper.java:32)           在com.deanblakely.SafeTalk.GlobalStuff.storeMessage(GlobalStuff.java:203)           在com.deanblakely.SafeTalk.MyFcmListenerService.handleNow(MyFcmListenerService.java:98)           在com.deanblakely.SafeTalk.MyFcmListenerService.onMessageReceived(MyFcmListenerService.java:38)           在com.google.firebase.messaging.FirebaseMessagingService.zzd(未知   来源:402)           在com.google.firebase.iid.zzg.run上(未知来源:26)           在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)           在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:636)           在com.google.android.gms.common.util.concurrent.zza.run(未知   资料来源:7)           在java.lang.Thread.run(Thread.java:764)

该应用程序使用的唯一权限是:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.vending.BILLING" />

以下是我们的侦听器服务中的代码,该代码在应用程序处于活动状态时以及关闭应用程序后大约一个小时内均可正常工作。

public class MyFcmListenerService extends FirebaseMessagingService {

    private static final String TAG = "MyFcmListenerService";
    private Map<String, String> data;

    @Override
    public void onMessageReceived(RemoteMessage message)
    {
        String from = message.getFrom();
        data = message.getData();
        String debug = "what is in data?";


        if (message.getNotification() != null) //is this a notification?
        {
            Log.d(TAG, "Message Notification Body: " + message.getNotification().getBody());
        }
        else
        {
            if (message.getData().size() > 0)
            {
                Log.d(TAG, "Message data payload: " + message.getData());
                handleNow(message);  //out methods that processes the message
            }
            else
            {
                Log.d(TAG," Got empty data message");
            }

        }
    }

当然,我们的清单文件中包含以下内容。 。

<service
     android:name=".MyFcmListenerService">
     <intent-filter>
         <action android:name="com.google.firebase.MESSAGING_EVENT" />
     </intent-filter>
 </service>

0 个答案:

没有答案