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

Arc*_*pgc 30 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);
Run Code Online (Sandbox Code Playgroud)

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

相反,我希望使用上面的代码调用初始的Activity_1's onResume().或适当的旗帜

FLAG_ACTIVITY_CLEAR_TOP

考虑由活动组成的任务:A,B,C,D.如果D调用具有解析为活动B的组件的Intent的startActivity(),则C和D将完成,B接收给定的Intent,从而导致现在堆栈是:A,B.

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

Nir*_*ali 41

您可以添加这两行并尝试

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)

将此内容写入Activity中的清单文件中

<activity
     android:name=".SettingsActivity"
     android:launchMode="singleInstance"
     android:screenOrientation="portrait" >
</activity>
Run Code Online (Sandbox Code Playgroud)

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

您可以使用SingleTask或SingleInstance

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

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

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


小智 14

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
Run Code Online (Sandbox Code Playgroud)

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

  • 这是 launchmode="SingleInstance" 的更好版本。我一直在寻找这面旗帜。 (2认同)

Ahm*_*NTS 8

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

android:launchMode="singleTask"
Run Code Online (Sandbox Code Playgroud)

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