0

我需要调用活动来重新启动孩子。也就是说,如果子活动已经存在,请关闭它然后再次启动它。并保持父母和孩子之间的历史/关系。即当我从孩子那里按回来时,我希望它交给父母

CLEAR_TOP 表示如果活动已经存在,它将不会重新启动它

NEW_TASK 听起来它会使子活动成为我不想要的应用程序的根

4

2 回答 2

1

根据我的理解你有3个要求:
1.子Activity只有一个实例:
我不知道原因,但是如果你只是想确保当前任务顶部的子Activity是单例的,那么singleTop就可以了;否则你需要使用 singleTask,但随后子活动将在另一个任务的根目录下创建。
2. 如果子活动已经存在,关闭它然后再次启动:
对于singleTop和singleTask,如果已经有一个子活动的实例(对于singleTop,在当前任务顶部已经有一个实例),意图将被传递给那个实例。您可以在 onNewInstance() 中重置您的活动状态。这应该与创建一个新的具有相同的效果。
3.当我从孩子那里按回来时,我想去找父母:
对于singleTop,无需再费力了。
对于 singleTask,你可以试试这个技巧是否有效:如果子 Activity 通过按下返回知道下一个要显示的 Activity,它可以通过调用 onDestroy() 中的 startActivity() 手动启动父 Activity。

有关 Android lauchMode 的更多信息,请阅读http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

于 2013-10-20T13:04:44.473 回答
0

使用这个,对我有用

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                                                             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                                                              getApplicationContext().startActivity(intent);
于 2013-10-20T12:45:29.620 回答