Android 已完成活动的Otto事件总线订阅服务器
当我在这样一个片段中开始一个新的活动时Android 已完成活动的Otto事件总线订阅服务器,android,otto,Android,Otto,当我在这样一个片段中开始一个新的活动时 Intent launchIntent = new Intent(); launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); launchIntent.setClassName(getBaseActivity().getPackageName(), MainAct
Intent launchIntent = new Intent();
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
launchIntent.setClassName(getBaseActivity().getPackageName(), MainActivity.class.getName());
startActivity(launchIntent);
getBaseActivity().finish();
调用了旧活动的一个片段,该片段订阅了我希望在新活动中捕获的相同事件。我结束旧的活动是错误的还是片段没有结束?
我在onDestroy方法中注销每个片段和活动
@Override
public void onDestroy() {
OttoBus.getInstance().unregister(this);
super.onDestroy();
}
看起来您在“旧”活动的片段中调用了
setRetainInstance(true)
,这就是为什么没有调用该片段的onDestroy()
方法的原因(片段没有被操作系统销毁,只是从活动中分离并保存在内存中)
我建议您在
onPause()
中注销事件并在onStart()
中注册,或者不要在内存中保留片段。在旧活动中,您在哪里调用unregister
?我想您必须在调用finish()之前注销活动。因为您保留了该对象的引用,并且该对象不符合回收的条件。我用此信息编辑了我的问题。您可以将您的代码也发布到您的注册/取消注册位置吗?谢谢。我将保留设置为false。这解决了我的问题。