FLAG_ACTIVITY_CLEAR_TASK无法使用FLAG_ACTIVITY_REORDER_TO_FRONT

时间:2016-08-23 05:40:34

标签: android android-activity back-stack

我遇到一个以FLAG_ACTIVITY_REORDER_TO_FRONT开头的活动有问题,在FLAG_ACTIVITY_CLEAR_TASK之后,屏幕上没有重新创建并显示。

所以步骤是:

  1. 打开应用,输入欢迎活动。
  2. 完成欢迎活动并启动没有特定意图标志的活动A.
  3. 使用活动A中的FLAG_ACTIVITY_REORDER_TO_FRONT启动活动B(创建B的新实例,现在堆栈变为A-> B)。
  4. 使用FLAG_ACTIVITY_REORDER_TO_FRONT从B开始活动A(现有A实例被置于堆栈顶部,因此堆栈变为B-> A)。
  5. 在某些情况下,我需要从头开始(就像另一个正常的应用程序启动一样),所以使用FLAG_ACTIVITY_CLEAR_TASK开始欢迎活动。
  6. 因此应用程序将在第1阶段后再次进入阶段2,这是我的预期,但是,如果我尝试使用活动A中的FLAG_ACTIVITY_REORDER_TO_FRONT再次启动活动B,则会有活动B的回调'onNewIntent,onStart,onResume'连续,但它不会出现在屏幕上。 对我来说,在某个地方仍然存在先前的活动B实例,但没有向我展示。

    我没有为活动A或B指定启动模式。

    我知道该文档说明了FLAG_ACTIVITY_CLEAR_TASK“这只能与FLAG_ACTIVITY_NEW_TASK一起使用。”。并且一起使用它们确实解决了我的问题,但是如果我点击主页按钮放置应用程序背景然后再次启动,它将成为另一个应用程序启动(进入阶段1)但不回到之前的顶级活动。

    所以我的问题是:

    1. 当我使用FLAG_ACTIVITY_CLEAR_TASK开始欢迎活动时,我没有看到活动A或B的onDestroy,是否按设计?
    2. 如果它们没有被销毁,它们会留在哪里,我可以参考它们吗?
    3. 如何在完成所有这些步骤后在屏幕上显示活动B?
    4. 第5阶段的代码:

      Intent i = new Intent(A.this, WelcomeActivity.class);
      i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
      startActivity(i);
      

      提前致谢。

      的AndroidManifest.xml

       <activity
                  android:name=".activity.WelcomeActivity"
                  android:configChanges="keyboardHidden|orientation|screenSize"
                  android:screenOrientation="portrait"
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
      
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
              </activity>
      
      <activity
                  android:name=".activity.A_Activity"
                  android:configChanges="keyboardHidden|orientation|screenSize"
                  android:screenOrientation="portrait"
                  android:theme="@style/BaiduMapTheme.MainMap"
                  android:windowSoftInputMode="adjustPan" />
      
      <activity
                  android:name=".activity.B_Activity"
                  android:configChanges="locale|fontScale|keyboard|keyboardHidden|layoutDirection|mcc|mnc|navigation|orientation|screenLayout|screenSize|touchscreen|uiMode"
                  android:screenOrientation="portrait"
                  android:windowSoftInputMode="stateVisible" />
      

1 个答案:

答案 0 :(得分:0)

好的,现在我觉得我有这些问题是因为我错误地使用了意图标记。

首先,我应该在文档说明的同时使用FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK。

然后一切看起来正常并且符合预期,除了一个:如果我将应用程序置于后台然后再次单击启动图标,将再次创建WelcomeActivity。

以前我认为我的现有活动堆栈被清除并且创建了一个新的WelcomeActivity,但事实证明现有的活动堆栈仍然存在,但是创建了一个额外的WelcomeActivity,所以我需要做的是添加一些额外的标志WelcomeActivity确定它是否在这种情况下创建,如果是,那么只需在onCreate()中调用finish(),然后我就可以回到之前进入后台的活动。