Android在系统低内存中杀死广播接收器

时间:2013-04-07 12:59:05

标签: android

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

我认为当系统内存不足时,广播接收器会被杀死,就像应用程序被Android设置强行停止一样。有一天我用自己的手机注意到了它。

android会在系统内存中杀死广播接收器吗?

在此之后还有再次启用它们吗?

2 个答案:

答案 0 :(得分:3)

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

  

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

     

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

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

答案 1 :(得分:2)

  

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

没关系。大多数Android应用都不应该有持久的服务。

  

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

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

  

当应用程序被强制停止从Android设置

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

  

android会在系统内存中杀死广播接收器吗?

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

  

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

当然不是。需要 的是停止按“强制停止”按钮。如果您希望模拟由于内存不足而终止的进程,请使用其他内容(例如,将应用程序从Android 4.0 +上的recent-tasks列表中移除)。