2

我的应用程序有一个广播接收器,它监听传入的短信,但没有持久服务。

我认为当系统内存不足时广播接收器会被杀死,例如当应用程序从 android 设置中强制停止时。一天后,我在自己的手机上注意到了这一点。

android是否会在系统内存不足时杀死广播接收器?

无论如何,在此之后是否可以再次启用它们?

4

2 回答 2

3

如果应用程序由于内存不足而被强制停止或杀死,那么广播接收器也会受到影响。

从 onReceive() 返回后,BroadcastReceiver不再处于活动状态,并且它的托管过程仅与在其中运行的任何其他应用程序组件一样重要。这一点尤其重要,因为如果该进程仅托管 BroadcastReceiver(用户从未或最近没有与之交互的应用程序的常见情况),那么在从 onReceive() 返回时,系统将认为其进程为空并主动终止以便资源可用于其他更重要的流程。

这意味着,对于运行时间较长的操作,您通常将Service与 BroadcastReceiver 结合使用,以在整个操作期间保持包含进程的活动状态。

当您的应用程序重新启动时,再次从该onResume()方法注册接收器。onPause()在您的活动方法上取消注册。对于长时间运行的操作,请使用Service.

于 2013-04-07T13:21:36.653 回答
2

我的应用程序有一个广播接收器,它监听传入的短信,但没有持久服务。

没事儿。大多数 Android 应用程序中不应该有持久服务。

我认为当系统内存不足时广播接收器被杀死

不是那些通过<receiver>清单中的元素注册的。

就像当应用程序被强制从 android 设置停止时一样

有才华的程序员意识到“强制停止”与“系统内存不足时被杀死”无关。在 Android 3.1+ 上,“强制停止”将阻止使用所有广播接收器,直到用户再次手动运行活动。但是,同样,当您的进程“在系统内存不足时被终止”时,Android 不会做与您点击“强制停止”按钮时发生的事情相同的事情。

android是否会在系统内存不足时杀死广播接收器?

不是那些通过<receiver>清单中的元素注册的。

因此,在应用程序需要一直运行的所有场景中,服务必须伴随它再次启用广播接收器。

当然不是。您需要停止按下“强制停止”按钮。如果您希望模拟由于内存不足而终止的进程,请使用其他方法(例如,在 Android 4.0+ 上将应用程序从最近的任务列表中滑出)。

于 2013-04-07T14:41:17.237 回答