Android:如果应用程序进程被杀死,动态注册的广播接收器将被激活

时间:2013-12-23 06:14:16

标签: android

据我所知,静态注册(通过清单)广播接收器将在广播被激活时激活,它不需要应用程序进程正在运行。但是动态注册的呢?

3 个答案:

答案 0 :(得分:4)

AFAIK,即使您的应用程序已关闭,销毁或被杀,您也可以让您的广播接收器可以在后台运行。

如果你想做一个以上,你不应该通过registerReceiver()注册它。通过元素在清单中注册它。然后,无论您的应用程序是否正在运行,它都可用。

如果您希望广播接收器在应用程序关闭,销毁或被杀死时被杀死或停止,还有一个选项。

你应该在onCreate中调用/调用registerReceiver()方法,你应该根据需要在onResume()或onpause()方法中调用/调用unregisterReceiver(),你可以使用它。

答案 1 :(得分:2)

AndroidManifest.xml 中声明的BroadcastReceiver与在Context.registerReceiver()中注册的{1}}之间的差异之一是,第一个由Android系统实例化,当第二个 - 由应用程序代码。当应用程序进程终止时,它的所有数据(包括所有对象和jvm本身)都将被销毁。因此,为接收器处理广播Intent的唯一方法是启动新的应用程序进程,实例化新的YourBroadcastReceiver并调用其onReceive()方法(这就是它对接收器的作用,在表现)。但是在使用registerReceiver()动态注册的接收器的情况下,系统只获得一些接收器实例,但不是它的创建机制。此外,例如,如果您的接收器类是非静态内部类,那么没有合理的方法通过外部(系统)代码实例化它,因为系统无法知道外部对象(和应用程序)应该处于哪种状态,接收器工作正常。构造函数也可以有参数。

因此,如果流程终止,您的动态注册BroadcastReceiver将永远不会被调用,直到您在新流程中注册新的。{/ p>

答案 2 :(得分:1)

正如android documentation所说:

当您在应用清单(Manifest声明的接收器)中定义广播接收器时,

  

系统软件包管理器在安装应用程序时注册接收器。然后,接收器成为应用程序的单独入口点,这意味着如果应用程序当前未运行,系统可以启动应用程序并发送广播。

但是当你动态注册广播接收器(上下文注册的接收器)时,

  

只要注册上下文有效,上下文注册的接收器就会接收广播。例如,如果您在“活动”上下文中注册,则只要活动未被销毁,您就会收到广播。如果您在应用程序上下文中注册,则只要应用程序正在运行,您就会收到广播。

因此,当您的应用程序被杀时,您的动态注册广播接收器将不会被激活。