向ComponentInfo发送广播时出现异常

时间:2015-08-29 22:54:34

标签: android push-notification broadcastreceiver push

我有一个Google云消息接收器,它已在AndroidManifest.xml中注册:

    <receiver
        android:name="com.app.android.push.HSPushReceiver"
        android:permission="com.google.android.c2dm.permission.SEND"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <action android:name="com.google.android.c2dm.intent.REGISTER" />
            <category android:name="com.app.android" />
        </intent-filter>
    </receiver>

当应用处于前台或被杀时,我可以收到消息。但是,如果我使用通知启动IntentService,然后将主活动刷掉,那么如果我发送通知,则会发生以下崩溃:

08-29 15:29:37.782 W/BroadcastQueue(  757): Exception when sending broadcast to ComponentInfo{com.app.android/com.app.android.push.HSPushReceiver}
08-29 15:29:37.782 W/BroadcastQueue(  757): android.os.DeadObjectException
08-29 15:29:37.782 W/BroadcastQueue(  757):     at android.os.BinderProxy.transactNative(Native Method)
08-29 15:29:37.782 W/BroadcastQueue(  757):     at android.os.BinderProxy.transact(Binder.java:496)
08-29 15:29:37.782 W/BroadcastQueue(  757):     at android.app.ApplicationThreadProxy.scheduleReceiver(ApplicationThreadNative.java:861)
08-29 15:29:37.782 W/BroadcastQueue(  757):     at com.android.server.am.BroadcastQueue.processCurBroadcastLocked(BroadcastQueue.java:245)
08-29 15:29:37.782 W/BroadcastQueue(  757):     at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:898)
08-29 15:29:37.782 W/BroadcastQueue(  757):     at com.android.server.am.BroadcastQueue$BroadcastHandler.handleMessage(BroadcastQueue.java:149)
08-29 15:29:37.782 W/BroadcastQueue(  757):     at android.os.Handler.dispatchMessage(Handler.java:102)
08-29 15:29:37.782 W/BroadcastQueue(  757):     at android.os.Looper.loop(Looper.java:135)
08-29 15:29:37.782 W/BroadcastQueue(  757):     at android.os.HandlerThread.run(HandlerThread.java:61)
08-29 15:29:37.782 W/BroadcastQueue(  757):     at com.android.server.ServiceThread.run(ServiceThread.java:46)
08-29 15:29:37.782 W/libprocessgroup(  757): failed to open /acct/uid_10377/pid_3948/cgroup.procs: No such file or directory
08-29 15:29:37.785 W/ActivityManager(  757): Scheduling restart of crashed service com.app.android/.HSNotificationService in 578824ms

HSNotificationService以某种方式崩溃了。当活动被刷掉时,PushReceiver会以某种方式死亡。如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

here中发现同样的问题。似乎是一个报告了herehere的Android错误。

我使用了here中的解决方法,它对我有用。有人说它有副作用。 side effect

解决方法是在前台服务中启动虚拟活动

@Override
public void onTaskRemoved( Intent rootIntent ) {
    Intent intent = new Intent( this, ServiceKeepActivity.class );
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}