2015-02-23 109 views
0

我在我的Android清单如下代码:广播接收器被丢弃

<receiver android:name="com.DDD.CCC.BBB.AAA" > 
    <intent-filter> 
     <action android:name="android.intent.action.SIM_STATE_CHANGED" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

在第一次开机时,有时android.intent.action.SIM_STATE_CHANGED没有收到,但有时它。

事件日志,当广播接收表明:

01-16 05:34:01.649 1230 1274 I am_proc_start: [0,3811,1000,com.DDD.CCC,content provider,com.DDD.CCC/.databases.XXX] 
01-16 05:34:01.659 1230 2798 I am_proc_bound: [0,3811,com.DDD.CCC] 
01-16 05:34:05.389 1230 1561 I am_kill : [0,3811,com.DDD.CCC,15,empty #14] 
01-16 05:34:05.389 1230 1242 I am_proc_died: [0,3811,com.DDD.CCC] 
01-16 05:34:11.899 1230 3470 I am_proc_start: [0,4642,1000,com.DDD.CCC,broadcast,com.DDD.CCC/.service.AAA] 
01-16 05:34:11.929 1230 1561 I am_proc_bound: [0,4642,com.DDD.CCC] 
01-16 05:34:16.579 1230 1242 I am_kill : [0,4642,com.DDD.CCC,15,empty #14] 
01-16 05:34:16.609 1230 1568 I am_proc_died: [0,4642,com.DDD.CCC] 
01-16 05:34:16.859 1230 1568 I am_proc_start: [0,5079,1000,com.DDD.CCC,broadcast,com.DDD.CCC/.service.AAA] 
01-16 05:34:16.889 1230 1274 I am_proc_bound: [0,5079,com.DDD.CCC] 
01-16 05:34:16.979 1230 2641 I notification_enqueue: [com.DDD.CCC,262082,NULL,0,Notification(pri=0 contentView=com.DDD.CCC/0x1090064 vibrate=null sound=null defaults=0x0 flags=0x10 kind=[null])] 
01-16 05:34:19.559 1230 2798 I am_kill : [0,5079,com.DDD.CCC,15,empty #14] 
01-16 05:34:19.559 1230 2642 I am_proc_died: [0,5079,com.DDD.CCC] 

当它不接受,那就说明如下:

01-16 05:41:29.809 1232 1506 I am_proc_start: [0,3793,1000,com.DDD.CCC,content provider,com.DDD.CCC/.databases.AAA] 
01-16 05:41:29.809 1232 2338 I am_proc_bound: [0,3793,com.DDD.CCC] 
01-16 05:41:36.939 1232 3326 I am_kill : [0,3793,com.DDD.CCC,15,empty #14] 
01-16 05:41:36.949 1232 3325 I am_proc_died: [0,3793,com.DDD.CCC] 
01-16 05:41:37.879 1232 1269 I am_proc_start: [0,4337,1000,com.DDD.CCC,broadcast,com.DDD.CCC/.service.AAA] 
01-16 05:41:37.899 1232 2339 I am_proc_bound: [0,4337,com.DDD.CCC] 
01-16 05:41:41.359 1232 1244 I am_kill : [0,4337,com.DDD.CCC,15,empty #14] 
01-16 05:41:41.369 1232 2355 I am_proc_died: [0,4337,com.DDD.CCC] 
01-16 05:41:41.369 1232 2355 I am_broadcast_discard_app: [0,1109557712,android.intent.action.SIM_STATE_CHANGED,21,ResolveInfo{428381d0 com.DDD.CCC/.service.AAA m=0x108000}] 

是的,我看到这个过程已经已经死了,它不会重新启动。 有没有人有任何线索为什么发生这种情况?

谢谢

+0

请从'onReceive()'发布代码。如果你在这个方法中做了太多的工作,Android将会杀死你的进程并转向下一个进程。你不能在onReceive()中花费大量时间来做任何事情。 – 2015-02-23 17:43:38

+0

是的,但是这意味着至少onReceive会被达成并且被杀害吗? 所以会发生的是,引导完成的广播被记录,但下一个(sim状态改变)没有达到onReceive。 所以,据我们所知,如果接收者做了太多的工作,它会杀死并移动到下一个(如果是第一个广播,第二个将被调用,如果是第二个,则是第三个将被称为) 但问题是,第二个onReceive,有时它根本不被调用。 在接收到两个广播的过程中,这个过程是否有可能被终止? – Nakayama 2015-02-23 22:46:39

+0

类似的,第二个广播正在排队,而第一个广播(引导完成)正在处理中。第一个广播完成后,该过程被终止,第二个广播被忽略。这有可能发生吗? – Nakayama 2015-02-23 22:49:04

回答

1

如果你的onReceive过程需要更长的时间,广播将是第三代ANR已经确认发生am_broadcast_discard_app接收第一或者第二广播之后。