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。这解决了我的问题。