我正在使用BroadcastReceiver通过我的应用程序接收SMS消息,然后根据消息的内容编辑数据库。该应用程序在打开时工作正常,但是如果我将其保持打开并且它会自动关闭,应用程序会在收到消息时强制关闭(我认为BroadcastReciever仍在工作,但应用程序的其余部分已经关闭)。有没有办法阻止应用程序关闭,或者在收到短信时恢复它?
谢谢
答案 0 :(得分:1)
如果您希望接收器具有持久性,则应考虑为您的应用使用Service
而不是标准Activity
。一旦执行返回onReceive
恢复其正常进程,处理Activity
时,标准活动中存在的BroadcastReceiver
被视为前台服务 优先级,可以根据需要由系统终止。
流程生命周期
当前正在执行BroadcastReceiver的进程(即当前在其onReceive(Context,Intent)方法中运行代码)被认为是一个前台进程,除非在极端内存的情况下,系统将继续运行压力。
从onReceive()返回后,BroadcastReceiver不再处于活动状态,其托管过程与其中运行的任何其他应用程序组件一样重要。这一点尤其重要,因为如果该进程只托管BroadcastReceiver(用户从未或最近没有与之交互的应用程序的常见情况),那么从onReceive()返回时,系统会认为其进程为空并且积极地杀死它使资源可用于其他更重要的过程。
这意味着对于运行时间较长的操作,您通常会将一个服务与BroadcastReceiver结合使用,以便在整个操作过程中保持包含进程处于活动状态。
有关创建服务的更多信息:
开发人员指南
有关如何创建服务的详细讨论,请阅读Services developer guide。