android - 进程中的 BroadcastReceiver 生命周期是什么?

标签 android lifecycle

阅读有关 Activity 和流程生命周期的一些问题/答案后。我想我了解有关 Activity 和流程生命周期的详细信息。但是我对这些观察者感到困惑,比如 BroadcastReceiver/ContentObserver with process lifecycle 。

我想知道的是,当我注册一个BroadcastReceiver(即监听SMS接收 Intent 的BroadcastReceiver)时,如果注册BroadcastReceiver的进程已经存在,当系统调用BroadcastReceiver时,

  1. 是否在同一个进程中?
  2. 而且因为进程没有终止,所以进程中的这些静态数据可以直接使用,对吧?
  3. 另一方面,如果进程已经终止,系统将再次启动进程,当然这些静态数据为空?
  4. 系统调用BroadcastReceiver时,会不会同时调用主activity的onCreate?

谢谢。

最佳答案

1.) 不确定“注册 BroadcastReceiver 的进程”是什么意思。如果您为 BroadcastRecevier () 提供了一个命名进程,那么它将在一个进程中创建,该进程的名称来自您的应用程序包加上名称属性 (XYZ)。如果具有该名称的进程已经存在,则不会创建新进程,并且您的 BroadcastReceiver 将在现有进程中创建。

2.) 因此,如果该进程仍在内存中,那么您是正确的,可能已经初始化了静态数据。

3.) 正确,在这种情况下,任何静态数据都必须重新初始化。

4.) 如果 BroadcastReceiver 的进程尚不存在,则将创建进程,但 BroadcastReceiver 将是进程中唯一创建的东西。不会启动任何 Activity 。

使 Activity 成为“主要”Activity 的唯一原因是它注册为使用 android.intent.action.MAIN 的操作处理某种 Intent。这是一种在“启动”应用程序时广播的 Intent。用户可以切换到已经运行的应用程序,并且“主要” Activity 不会发挥作用,因为在这种情况下不会广播带有操作 MAIN 的 Intent。关键是在“主”Activity 与其运行的进程没有特殊关系。它只与特定类型的 Intent 有特殊关系。

关于android - 进程中的 BroadcastReceiver 生命周期是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4523872/

相关文章:

java - Java 中如何知道对象何时被释放?

c# - 我应该把Azure WorkerRole base.OnStop();

Android - 是否可以确定一个 Activity 是否从另一个任务开始?

java - Android:统计应用程序启动次数

java - 使用 Firebase Firestore 中两个集合的数据填充 Androidx RecyclerView 和 CardView

java - ListActivity 是否扩展了 Activity?

android - 在可绘制文件中修改png文件后,它仍然在手机运行中显示旧图标

android - java.lang.NoClassDefFoundError : Could not initialize class android. View .GestureDetector

java - Android 重用 Activity

Android Activity 生命周期和锁定/解锁设备