如果后备堆栈中已存在,则恢复活动而不是启动

时间:2013-03-12 10:48:11

标签: android back-stack

经过很多步骤,我有一个Activity_1,比如说

Activity_2 > Activity_3 ....在某些Activity_n中我更改了与Activity_1相关的一些数据并使用

Intent intent = new Intent(Activity_n.this, Activity_1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

刷新内容。但是后来我可以一直回到我开始的Activity_1,那里有旧数据。

相反,我希望使用上面的代码调用初始Activity_1的{​​{1}}。或者适当的标志

FLAG_ACTIVITY_CLEAR_TOP

  

考虑由活动组成的任务:A,B,C,D。如果D呼叫   startActivity(),带有解析为组件的Intent   活动B,然后C和D将完成,B接收给定的   意图,导致堆栈现在为:A,B。

那是'博士说的,但不是我得到的。

3 个答案:

答案 0 :(得分:38)

您可以添加这两行并尝试

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

将此内容写入活动

中的清单文件中
<activity
     android:name=".SettingsActivity"
     android:launchMode="singleInstance"
     android:screenOrientation="portrait" >
</activity>

“singleTask”和“singleInstance”活动只能开始一项任务。它们始终位于活动堆栈的根部。此外,设备一次只能保存一个活动实例 - 只有一个这样的任务。

您可以使用SingleTask或SingleInstance

“singleTask” - 系统在新任务的根目录下创建活动并将意图路由到该任务。但是,如果活动的实例已经存在,系统会通过调用onNewIntent()方法将意图路由到现有实例,而不是创建新实例。

“singleInstance” - 与“singleTask”相同,但系统不会在持有实例的任务中启动任何其他活动。活动始终是其任务的唯一成员。

请参阅此链接http://developer.android.com/guide/topics/manifest/activity-element.html

答案 1 :(得分:12)

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

访问:http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT

答案 2 :(得分:6)

如果存在,则从backstack恢复Activity,否则创建一个新的<{p}}

android:launchMode="singleTask"

将此行添加到您应用的AndroidManifest.xml中,并使用正常的Intent启动活动。