1

我正在使用JobIntentService任务结束后执行一些任务我发送一个广播,它也被我的一个活动收听。

假设在Android操作系统关闭活动以释放一些内存的情况下,如果广播是从应用程序发送的,JobIntentService是否OnCreate也会被调用?

4

2 回答 2

2

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

于 2019-10-29T20:14:29.860 回答
1

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

冷启动是指应用程序从头开始:系统进程在此启动之前尚未创建应用程序的进程。冷启动发生在设备启动后首次启动应用程序或系统终止应用程序后等情况下。

关于 BroadcastReceiver 生命周期:

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

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

JobIntentService & Receiver

当您(从接收器)启动 JobIntentServie 时,只要有活动的作业正在进行,您的作业意图服务就不会被操作系统杀死(请注意,可能有时间限制,要了解更多信息: Android的JobIntentService docs中提到的“JobService执行时间限制”?)。

现在,如果您的活动在此期间被破坏,那么您的广播接收器将不会收听广播,因为它的生命周期已经结束,如果您不自己注销接收器,系统将杀死它,因为系统认为广播接收器不再活动.

所以如果你想在你的应用程序没有被销毁的情况下收听广播,你应该在应用程序的onCreate()方法中注册你的广播接收器。

于 2018-07-27T16:11:17.773 回答