我有一个用户注册活动。在某些时候,在那个活动中,我有一个带注册表格的片段。当用户单击注册按钮时,我有一个事件派遣用这样的事件总线
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是活着的。我对活动片段耦合生命周期感到困惑。
答案 0 :(得分:1)
假设" alive"你的意思是"创建但尚未销毁",活动生命周期不依赖于内部碎片,尽管反向可能有效。
此时片段可能已被破坏(在生命周期中意义),但它仍然是尚未进行垃圾收集的java类的实例。如果是这样,它仍然有机会发布Event
。严格来说,例如,Activity has been destroyed
并不意味着它的实例已被收集 - 它只是经历了破坏过程。
您也可能在片段上使用setRetainInstance,这样可以在重新创建活动时保持片段实例处于活动状态。
在任何情况下,要知道为什么您的RegistrationActivity被销毁,需要更多代码。这可能是配置更改,例如更改方向或正在进行的其他调用。