8

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

活动按A->B->C->D的顺序展开。

这里,

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

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

    Intent.FLAG_ACTIVITY_CLEAR_TOP 
    

在我使用上述 1 和 2 的应用程序中,我尝试实现类似
- 返回并恢复活动 A 并从堆栈中删除其他活动,
所以我尝试过。

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

使用上面的代码,两个标志都在这里使用这个参考
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).  

那么我如何结合这些标志来获得组合动作来恢复 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);
4

2 回答 2

14

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

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


编辑

它不适合你的原因是

android:launchMode="singleInstance"

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

于 2012-09-04T13:01:47.143 回答
3

无需单独调用setFlags()addFlags()您可以setFlags()同时使用FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP标志调用:

Intent i = new Intent(this, ActivityA.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
于 2012-09-05T15:44:18.590 回答