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