application,service 和广播接收器执行顺序 #

如果你的静态广播接收器(Receiver)监听 BOOT_COMPLETED 并在其中启动 Service,那么 ApplicationonCreate() 仍然会在广播接收器运行之前执行

执行顺序是这样的:

  1. 设备启动完成 (BOOT_COMPLETED): 当 Android 设备启动完成后,系统会发送 BOOT_COMPLETED 广播。
  2. 应用进程启动 (如果尚未运行): 为了让你的广播接收器能够接收到这个广播,如果你的应用进程当前没有运行,Android 系统会启动你的应用进程
  3. Application 对象创建和 onCreate() 调用: 在启动应用进程的过程中,系统会首先创建你的 Application 类的实例(如果你自定义了 Application 类)。然后,系统会调用你的 Application 类的 onCreate() 方法。这是在任何你的应用组件(包括广播接收器)被实际创建和运行之前发生的。
  4. 静态广播接收器创建和 onReceive() 调用: 一旦 ApplicationonCreate() 执行完毕,系统会查找并创建注册了 BOOT_COMPLETED 广播的静态广播接收器实例。然后,系统会调用你的广播接收器的 onReceive() 方法。
  5. onReceive() 中启动 Service: 在你的广播接收器的 onReceive() 方法中,你会编写启动你的 Service 的代码(例如,使用 startService()ContextCompat.startForegroundService())。
  6. Service 的创建和 onCreate() 调用: 当你调用启动 Service 的方法时,系统会创建你的 Service 类的实例,并调用其 onCreate() 方法。

总结:

Application.onCreate() -> 静态广播接收器创建 -> BroadcastReceiver.onReceive() -> Service 创建 -> Service.onCreate()

关键点:

  • 应用进程是所有组件运行的基础: 无论是启动 Activity、Service 还是接收广播,都需要先有应用进程运行起来。
  • Application 是进程的入口点: 在应用进程启动时,系统会首先创建并初始化 Application 对象,并调用其 onCreate() 方法。
  • 广播接收器是按需创建的: 只有在接收到其注册监听的广播时,广播接收器的实例才会被创建,并且其 onReceive() 方法才会被调用。

因此,即使你的 Service 是在 BOOT_COMPLETED 广播接收器中启动的,ApplicationonCreate() 仍然会先一步执行,为你的应用提供必要的初始化环境。这确保了当你的广播接收器和后续启动的 Service 运行时,应用级别的初始化工作已经完成。


https://www.cnblogs.com/Bolia/p/18361343

https://developer.android.com/privacy-and-security/direct-boot?hl=zh-cn