向 ComponentInfo 发送广播时出现异常
Exception when sending broadcast to ComponentInfo
我有一个 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,然后将主 activity 滑开,那么如果我发送通知,我会遇到以下崩溃:
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 不知何故崩溃了。当 activity 被刷走时,PushReceiver 不知何故死了。如何解决这个问题?
在 here. Seems to be an Android bug reported here and here 中发现了同样的问题。
我使用了 here and it's working for me. Someone said it has side effect though. side effect
中的解决方法
解决方法是在前台服务中启动虚拟 activity
@Override
public void onTaskRemoved( Intent rootIntent ) {
Intent intent = new Intent( this, ServiceKeepActivity.class );
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
我有一个 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,然后将主 activity 滑开,那么如果我发送通知,我会遇到以下崩溃:
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 不知何故崩溃了。当 activity 被刷走时,PushReceiver 不知何故死了。如何解决这个问题?
在 here. Seems to be an Android bug reported here and here 中发现了同样的问题。
我使用了 here and it's working for me. Someone said it has side effect though. side effect
中的解决方法解决方法是在前台服务中启动虚拟 activity
@Override
public void onTaskRemoved( Intent rootIntent ) {
Intent intent = new Intent( this, ServiceKeepActivity.class );
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}