我的应用程序有一个广播接收器,它可以监听传入的短信,但没有持久的服务。
我认为当系统内存不足时,广播接收器会被杀死,就像应用程序被Android设置强行停止一样。有一天我用自己的手机注意到了它。
android会在系统内存中杀死广播接收器吗?
在此之后还有再次启用它们吗?
答案 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列表中移除)。