使用 alwaysRetainTaskState 和 lauchMode 保留 android 应用状态

2022-09-03 14:10:53

在我的Android应用程序中,我有一个主要活动,用作我的应用程序的入口点,它在我的清单文件中配置如下:

<activity android:name=".Main"
              android:label="@string/app_name"
              android:screenOrientation="portrait"
              android:alwaysRetainTaskState="true"
              android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

因此,对于特定的用例,假设用户通过单击应用程序启动器内的图标从主屏幕启动应用程序。启动应用后,用户从“主要”活动导航到活动 A,最后导航到活动 B。此时,用户决定检查他们的Facebook,因此他们单击主页按钮将我的应用程序放在后台,并启动Facebook应用程序。

检查他们的Facebook后,用户想要返回我的应用程序,因此他们按主页键,然后从应用程序启动器启动应用程序(就像他们第一次启动应用程序一样)。

当用户返回到我的应用时,我希望应用返回到用户在将应用置于后台时所处的最后一个活动,在本例中为活动 B。在清单文件中,我设置了alwaysRetainTaskState=true,以确保操作系统不会杀死我的应用程序的活动。

现在来回答我的问题:我如何获得我上面描述的行为?每当我单击应用程序的图标时,它始终从主要活动开始,无论如何。我认为这是因为类别。启动器属性。我尝试过android:launchMode=singleTask,但它并没有产生任何影响;它总是从Main开始。

如果有人可以澄清意图过滤器,启动模式和任务,那就太好了!


答案 1

仅供参考不是你想要的,因为它启动了一个新任务:singleTask

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

您如何启动活动 B?任何非标准启动模式或意图标志?


答案 2

对于任何带着类似问题来到这里的人,我发现了一些奇怪的东西,这可能是你所看到的......或。

假设我有一个包含活动A ->B ->C等的应用程序。我的应用程序总是“恢复”到A,如果它是从应用程序列表(即启动器)启动的,我遇到了问题。从“怨恨”屏幕(长按)恢复将表现出正确的简历行为(按预期恢复到B或C)。我的清单没什么特别的,我总是在我的根活动中设置RetainTaskState=“true”,并且启动模式是默认的(标准)。

我通过网站将apk加载到我的手机上。下载并安装后,我会按“打开”立即启动该应用程序。由于某种原因(卸载应用程序后),我厌倦了再次下载,安装,但后来我按了“完成”按钮。然后,从启动器/“所有应用程序”列表中启动应用程序具有与从最近恢复相同的恢复行为 - 换句话说,由于单击“打开”而不是“完成”时的安装过程,我的问题以某种方式引起。

我在API10(2.3.5)和API15(4.0.4)上验证了这个“解决方案”


推荐