【问题标题】:What's BroadcastReceiver lifecycle in a process?流程中的 BroadcastReceiver 生命周期是什么?
【发布时间】:2010-12-24 02:36:02
【问题描述】:

阅读有关活动和流程生命周期的一些问题/答案后。我想我了解有关活动和流程生命周期的详细信息。但是我对这些 Observers 感到困惑,比如 BroadcastReceiver/ContentObserver 和进程生命周期。

我想知道的是,当我注册一个广播接收器(即广播接收器监听短信接收意图)时,如果注册广播接收器的进程确实已经存在,当系统调用广播接收器时,

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

谢谢。

【问题讨论】:

    标签: android lifecycle


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 从 Android 3.1 开始,如果用户从未启动过相应的应用程序或用户通过 Android 菜单明确停止了应用程序(在管理申请)。
    【解决方案2】:

    BroadcastReceiversContentObservers 完全不同。

    1.) 是的,通常你所做的一切都在同一个过程中,除非非常明确地定义为不。

    2.) 这个问题毫无意义。你在问什么?

    3.) 再一次,毫无意义。什么静态数据?

    4.) 不。广播接收器与活动完全不同。当广播接收器接收到广播时,唯一调用的是它的onReceive() 方法。

    【讨论】:

    • 静态数据是指静态类字段(单例实现)。我将应用程序逻辑数据存储在其中。感谢您的回复。
    • 关于问题4,我真正想问的是,系统会不会调用我的主Activity(类MainActivity扩展Activity)onCreate方法?
    • 我回答了问题 4。不。您的广播接收器与您的活动无关。它如何知道要为哪个活动调用 onCreate,为什么会这样?您的 2/3 问题仍不清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2014-05-19
    相关资源
    最近更新 更多