我正在做一些测试,我认为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.
答案 0 :(得分:1)
我想我已用setRepeating()
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), delayInMilli, pendingIntent);
答案 1 :(得分:0)
您可能会遇到“优先级较高的应用需要内存”的情况 - &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代码。所以你的问题是不同的。