如何使用FLAG_REORDER_TO_FRONT和FLAG_CLEAR_TOP启动Activity

我的任务A,B,C,D有四项活动。

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

这里,

  1. 我想回到D的活动A并重新开始活动。
    所以我使用了意向标志

    i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
  2. 活动B,C,D实例在stmt 1之后不再需要。
    我去为国旗做到这一点,

     Intent.FLAG_ACTIVITY_CLEAR_TOP 

在我的APPP使用上面的1和2我试图实现像
– 返回并恢复活力A,并从堆栈中移除其他活动
所以我试过了。

  i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //vise versa 

使用上面的代码这两个标志都在这里使用这个引用
( Android:意图的setFlags和addFlags之间有什么区别 )

我不能够完成这些任务(恢复活动A并清除其他)。

实际的呼叫scheme是

 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). 

那么我怎么能结合这个标志来获得组合的行动恢复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" /> 

活动1-> 2

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

活动2-> 3

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

和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); 

您不需要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); 

要么

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

我build议您阅读Intent.FLAG_ACTIVITY_CLEAR_TOP的文档。


编辑

为什么它不为你工作的原因是

 android:launchMode="singleInstance" 

在清单中。
您的NeverStopActivity活动是在不同于其他任务的情况下创build的。 singleInstance标志的含义在Tasks和Back Stack中有描述。
我build议你阅读整篇文章。

无需分别调用setFlags()addFlags() ,只需使用setFlags()FLAG_ACTIVITY_SINGLE_TOP标志调用setFlags()

 Intent i = new Intent(this, ActivityA.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(i);