AndroidManifest中注册的BroadcastReceiver在应用程序进程被杀死时能否接收Intent?

3

我有一个在AndroidManifest中注册的接收器,但似乎当应用程序被杀死时它不能接收意图,我是否对Android进程生命周期有一些误解?

感谢任何帮助。


1
你有一个持有BR的应用程序,当你使用任务管理器杀死它时,它不再接收事件了吗? - Mister Smith
是的,但我认为如果系统的意图过滤器与传入的意图匹配,系统可以创建在清单文件中注册的接收器。 - Roman
相关链接:https://dev59.com/plvUa4cB1Zd3GeqPpxO2 - Mister Smith
1个回答

6

如果用户进入设置并强制停止您的应用程序,在Android 3.1及更高版本中,您的BroadcastReceivers将不再起作用。您将返回到安装您的应用程序时处于的状态 -- 必须手动运行一个组件(例如,用户从主屏幕启动活动)才能使您的BroadcastReceivers再次工作。


3
那么,这意味着如果我有“来电短信广播”,如果用户从设置中强制停止,它将无法工作?如果是的话,那看起来很奇怪。 - Lalit Poptani
1
@LalitPoptani:“那么,这意味着如果我有传入的SMS广播,如果用户从设置中强制停止,它将无法工作?” - 首先,强制停止不会停止广播,而是停止接收器。其次,用户无法从设置中强制停止他们的移动运营商(例如AT&T)-最多,他们可以强制停止短信客户端(例如Messenger)。如果他们强制停止短信客户端,则该短信客户端将无法接收消息,直到用户手动再次运行短信客户端。“如果是这样,那么似乎很奇怪”-欢迎您发表您的意见。 - CommonsWare
@CommonsWare,您能详细解释一下广播和接收器吗?我认为如果用户从设置中强制停止应用程序,BroadCastReceiver不会停止工作,因为BroadCastReceiver是基于事件的。如果我错了,请纠正我。 - Lalit Poptani
1
@MisterSmith:“然后一旦onReceive方法完成,终止进程”--一旦onReceive()返回,该进程将有资格终止,但通常不会立即终止。 “它不会停止未来的调用,因为每个调用都在不同的进程中运行”--强制停止是一个应用程序的事情,而不仅仅是一个进程的事情。一旦强制停止应用程序,除非有东西显式地启动组件(例如,用户运行活动),否则该应用程序将永远不会再次运行。几个世纪可能过去了,该应用程序仍将被阻止运行。 - CommonsWare
@CommonsWare 我完全迷失了。引用开发者指南的话:“默认情况下,每个应用程序都在自己独立的Linux进程中运行。当应用程序的任何组件需要执行时,Android会启动该进程,然后在不再需要或者系统需要为其他应用程序恢复内存时关闭该进程”。因此我很困惑。不过你的答案很有道理(只是我不太理解)。 - Mister Smith
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接