GCM 8.3 - 在 ACTION_BOOT_COMPLETED 上启动 GcmListenerService 导致崩溃

GCM 8.3 - crash resulting from starting a GcmListenerService on ACTION_BOOT_COMPLETED

我继承了一些在 ACTION_BOOT_COMPLETED 上调用 GcmListenerService 的代码:

    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        context.startService(new Intent(context, NotificationListenerService.class));
    }

此代码的目的是确保 GCM 侦听器在设备启动时启动。

它导致了中描述的崩溃:

FATAL EXCEPTION: AsyncTask #1
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a null object reference
E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.zzo(Unknown Source)
E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.zza(Unknown Source)
E/AndroidRuntime:     at com.google.android.gms.gcm.GcmListenerService.run(Unknown Source)
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)

按照接受的答案中的建议删除此代码后,我的测试设备上一切正常,并且当设备按预期启动时我的 GCM 侦听器启动。

问题是,对于 OS(我的测试设备上有 Marshmallow)或播放服务版本较低的设备,是否存在可能存在问题的风险。如果是这样,是否有任何可能的方法来检测并针对这些情况启动服务?

经过大量谷歌搜索和测试后,我决定删除这段代码。我没有看到任何负面影响。这段代码的初衷是为了克服导致侦听器无法自动启动的 GCM 错误。但是对于 8.3 版,这种方法是错误的,应该被删除,因为它会导致某些设备崩溃。