广播接收者“赢死”

时间:2012-05-31 09:42:54

标签: android broadcastreceiver

我正在做一些测试,我认为Android正在杀死我的远程Broadcastreceiver。

现在我正在从一项活动开始我的Broadcastreceiver,然后让广播接收器每分钟设置一次警报再次启动。这可以在几个小时(2-20小时)内发挥作用,然后它会“赢得死亡”。

有谁知道为什么我会得到这个以及我可以做些什么让它永久运行?

D/ShutMeUp AlarmReceiver(16161): ALARM TRIGGERED <br>
I/ShutMeUp AlarmReceiver(16161): Doing AWESOME stuff
<br>I/ShutMeUp AlarmReceiver(16161): Month:May Day:Monday Hour:0 Min:10
<br>D/ShutMeUp AlarmReceiver(16161): ALARM END
<br>D/ShutMeUp AlarmReceiver(16161): ALARM TRIGGERED
<br>I/ShutMeUp AlarmReceiver(16161): Doing AWESOME stuff
<br>I/ShutMeUp AlarmReceiver(16161): Month:May Day:Monday Hour:0 Min:11
<br>D/ShutMeUp AlarmReceiver(16161): ALARM END
<br>I/ActivityManager( 1904): Exiting application process se.davidsebela.ShutMeUp  
 (android.os.BinderProxy@4423b0b0)
<br>I/WindowManager( 1904): WIN DEATH: Window{4430bea8se.davidsebela.ShutMeUp/se.davidsebela.ShutMeUp.ShutMeUp paused=false}
<br>I/WindowManager( 1904): WIN DEATH: Window{441f17e8 se.davidsebela.ShutMeUp/se.davidsebela.ShutMeUp.Create paused=false}
<br>I/ActivityManager( 1904): Process se.davidsebela.ShutMeUp:remote (pid 16161) has died.

3 个答案:

答案 0 :(得分:1)

我想我已用setRepeating()

解决了我的问题
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), delayInMilli, pendingIntent);

答案 1 :(得分:0)

Activity life cycle

您可能会遇到“优先级较高的应用需要内存”的情况 - &gt; “app process kill”。

使用Linux,您无法确定应用是否永久运行。

答案 2 :(得分:0)

如果您的代码从活动中启动广播接收器,您还必须从活动中停止它(以及alarmmanager-entry),因为android可能会在您遇到的情况下从内存中丢弃您的活动。

<击>

我在onResume()注册并在onPause()注销。

如果你希望BroadCastReceiver在内存不足时重新加载,我宁愿通过清单注册BroadCastReceiver。在这种情况下,android os handels加载/卸载。

[更新]

 > I am starting my Broadcastreceiver from an activity

我误解了这句话,说明你是通过代码而不是manifest来注册BroadCastReceiver的。如果它在清单中注册,android负责加载Broadcastreceiver代码。所以你的问题是不同的。