2013-03-12 77 views
23

已经存在,我有很多的步骤后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_1onResume()。或适当标志

FLAG_ACTIVITY_CLEAR_TOP

考虑任务组成的活动:A,B,C,D,如果d调用 startActivity()与解析为的成分的意图 活动B,则C和d将完成和B接收该给定 意图,导致堆栈现在是:A,B.

那WHA文档说,但不是我所得到的。

回答

32

您可以添加这两条线,并尝试

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

+0

但是这是一个**片段**我正在使用。直到现在我正在使用**片段**的onResume()。其中不包含任何内容像'onNewIntent()'。但是没有办法清除整个后台堆栈并调用一个新的** Activity ** – 2013-03-12 11:02:58

+0

请参见我已经添加了两行,您可以尝试这种方式 – Nirali 2013-03-12 11:07:02

+0

谢谢那工作。 – 2013-03-12 11:16:29

4

恢复Activity从堆栈中是否存在或创建一个新的,如果不是

android:launchMode="singleTask" 

此行添加到您的应用程序的AndroidManifest。 xml并用正常的Intent开始活动。

+0

我应该在哪里写这个? – GabrielOshiro 2017-02-10 01:22:29

+0

在manifest.xml中 – AhmedNTS 2017-02-10 20:18:36

+2

您应该将其添加到您的答案中,否? – GabrielOshiro 2017-02-11 02:52:26

相关问题