活动被破坏,无法从包含的片段中调度事件

时间:2015-10-03 13:58:49

标签: android android-fragments android-activity

我有一个用户注册活动。在某些时候,在那个活动中,我有一个带注册表格的片段。当用户单击注册按钮时,我有一个事件派遣用这样的事件总线

RegistrationFragment (包含在 RegistrationActivity 中)

EventBus.getDefault().post(new RegistrationSuccessfulEvent());

RegistrationActivity

public void onEvent(RegistrationSuccessfulEvent event) {
    startActivity(new Intent(this, MainActivity.class));
}

我得到了这个例外

Could not dispatch event: class com.myapp.RegistrationSuccessfulEvent to subscribing class class com.myapp.RegistrationActivity ... 
java.lang.IllegalStateException: Activity has been destroyed

为什么我的活动被破坏了?如果活动A包含片段F,活动在F仍然启动并运行时终止,是否可能?当F处于活动状态或任何其他包含的片段处于运行状态时,我认为A是活着的。我对活动片段耦合生命周期感到困惑。

1 个答案:

答案 0 :(得分:1)

假设" alive"你的意思是"创建但尚未销毁",活动生命周期不依赖于内部碎片,尽管反向可能有效。

此时片段可能已被破坏(在生命周期中意义),但它仍然是尚未进行垃圾收集的java类的实例。如果是这样,它仍然有机会发布Event。严格来说,例如,Activity has been destroyed并不意味着它的实例已被收集 - 它只是经历了破坏过程。

您也可能在片段上使用setRetainInstance,这样可以在重新创建活动时保持片段实例处于活动状态。

在任何情况下,要知道为什么您的RegistrationActivity被销毁,需要更多代码。这可能是配置更改,例如更改方向或正在进行的其他调用。