如何使用FLAG_REORDER_TO_FRONT和FLAG_CLEAR_TOP启动Activity

Mut*_*raj 8 android android-intent android-activity

我在任务A,B,C,D中有四项活动.

按A-> B-> C-> D顺序启动活动.

这里,

  1. 我想从D回到活动A并恢复该活动.
    所以我使用了intent标志

    i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);  
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在stmt 1之后不再需要活动B,C,D实例.
    我去标志来完成这个,

    Intent.FLAG_ACTIVITY_CLEAR_TOP 
    
    Run Code Online (Sandbox Code Playgroud)

在我的appp中使用上面的1和2我尝试实现像
- 返回并恢复活动A并从堆栈中删除其他活动
所以我尝试了.

    i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);  
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //vise versa  
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,使用此引用在这里添加两个标志
(Android:setFlags和addFlags for intent之间有什么区别)

我无法完成这些任务(恢复活动A并清除其他任务).

实际的呼叫场景是

when i use the CLEAR flag the call is like   D->oncreate(A)   and clear BCD
when i use the REORDER flag the call is like   D->onrestart(A).  
Run Code Online (Sandbox Code Playgroud)

那么我如何组合这些标志以使组合动作恢复A并清除其他或有任何其他方法来执行此操作.

这是我的表现

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.tpv.vptest" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
android:minSdkVersion="8" 
android:targetSdkVersion="15" /> 

<application 
android:icon="@drawable/ic_launcher" 
android:label="@string/app_name" 
android:theme="@style/AppTheme" > 
<activity 
android:name=".NeverStopActivity" 
android:label="@string/title_activity_main" 
android:launchMode="singleInstance"> 
<intent-filter> 
<action android:name="android.intent.action.MAIN" />
Run Code Online (Sandbox Code Playgroud)

活动1-> 2

Intent i = new Intent(getApplicationContext(), TopMenuBar.class);
 startActivity(i);
Run Code Online (Sandbox Code Playgroud)
  • 您可以在1秒内再次执行此操作 - 重试/取消

活动2-> 3

Intent i = new Intent(getApplicationContext(), 
Activity3.class); 

startActivity(i);
Run Code Online (Sandbox Code Playgroud)

和3-> 1

Intent i = new Intent(getApplicationContext(),
 NeverStopActivity.class);

 i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

 startActivity(i);
Run Code Online (Sandbox Code Playgroud)

paw*_*eba 12

你不需要Intent.FLAG_ACTIVITY_REORDER_TO_FRONT,Intent.FLAG_ACTIVITY_SINGLE_TOP而是使用.

所以,这将工作:

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Run Code Online (Sandbox Code Playgroud)

要么

i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Run Code Online (Sandbox Code Playgroud)

我建议你阅读Intent.FLAG_ACTIVITY_CLEAR_TOP的文档.


编辑

它不适合你的原因是

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

在清单中.
您的NeverStopActivity活动是在不同的任务中创建的.任务和后台堆栈中singleInstance描述了该标志的含义. 我建议你阅读整篇文章.