如果收到广播,将调用 Application Class OnCreate

Will Application Class OnCreate be called if a Broadcast is recieved

我正在使用 JobIntentService 在任务结束后执行一些任务 我发送了一个广播,我的 Activity.

之一也收听了该广播

假设在 activity 被 Android OS 关闭以释放一些内存的情况下,如果广播是从 JobIntentService 发送的,OnCreate的Application也叫?

没有。它永远不会调用应用程序 OnCreate() 方法(仅在冷启动期间调用)。

A cold start refers to an app’s starting from scratch: the system’s process has not, until this start, created the app’s process. Cold starts happen in cases such as your app’s being launched for the first time since the device booted, or since the system killed the app.

关于 BroadcastReceiver 生命周期:

如果您的接收器在 activity 中注册,那么它的生命周期就是活动生命周期。因此,一旦您的 activity 被销毁,您的接收器将无法收听。

如果您的接收器在应用程序中注册,那么它的生命周期将是应用程序生命周期,只要应用程序未被销毁,它就能够收听广播。

JobIntentService 和接收器

当您启动 JobIntentServie(从接收器)时,只要有活动作业在进行,您的工作意向服务就不会被 OS 杀死(请注意可能有时间限制, 了解更多: ).

现在如果你的activity同时被销毁那么你的广播接收器将不会收听广播因为它的生命周期已经结束,如果你不自己取消注册接收器,系统将杀死它作为系统认为 BroadcastReceiver 不再处于活动状态。

所以如果你想收听广播只要你的应用程序不被破坏,你应该在应用程序onCreate()方法中注册你的广播接收器。

我不知道标记为正确的答案是否仍然正确。在 phone 运行 Android P 上,如果您有清单声明的广播接收器和在 <application> 节点中定义的应用程序 class,则 onCreate() 在您的应用程序中 class 在您的广播接收器中的 onReceive 之前被调用。我认为没有理由相信 Android 的其他版本会有不同的行为。