Android中维护标准应用Activity回栈状态(使用singleTask启动模式)

Posted

技术标签:

【中文标题】Android中维护标准应用Activity回栈状态(使用singleTask启动模式)【英文标题】:Maintaining standard application Activity back stack state in Android (using singleTask launch mode) 【发布时间】:2011-07-02 12:00:31 【问题描述】:

我不知道如何在开发中维护我的 android 应用的状态。

澄清一下,我不是在谈论维护活动状态(即跟踪特定活动的文本框值、复选框等)。

假设我的应用程序有两个活动AB。当我启动我的应用程序时,它会将我带到活动 A,然后按下它上的按钮将我带到活动 B。此时,我按下手机上的主页按钮返回主 Android UI 并退出我的应用程序。但是,如果我选择再次运行我的应用程序,它应该将我带到活动 B,这是我在按下主页按钮之前停止的地方,而是将我带到活动 A

有谁知道我该如何纠正这个问题?

(如果您需要知道,我使用的是三星 Vibrant)

【问题讨论】:

【参考方案1】:

“但是,如果我选择再次运行我的应用程序,它应该将我带到活动 B,这是我在按下主页按钮之前停止的地方,而是将我带到活动 A。”

是的,应该。如果不是,您已经在您的应用程序中执行了一些操作来告诉平台修改其行为。 (以 ApiDemos 为例,它使用标准行为,这听起来就像您所描述的那样。)

注意事项:

启动活动时不要使用 FLAG_ACTIVITY_NEW_TASK。 不要使用 singleTask 或 singleInstance 启动模式。 看不到 clearTaskOnReset 标志。

【讨论】:

啊,是singleTask启动模式的原因。我的应用程序按预期工作。谢谢!【参考方案2】:

您想象有一种叫做“应用程序”的东西,但那是一种错觉。您的应用程序只是活动、服务、接收器等的集合。

如果您查看清单中的 intent-filter 标签,您会发现主屏幕中的每个图标都与如下过滤器相关联:

     <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>

您可以在两个 Activity 上放置相同的 XML 块,您会在主屏幕中看到两个图标,一个始终启动 Activity A,一个始终启动 Activity B。

您可能想要做的是创建一个主 Activity,它根据共享状态启动其他 Activity 之一。

至于实际存储共享状态的位置,这取决于您的状态有多复杂。这是一个很好的起点:http://developer.android.com/guide/topics/data/data-storage.html

【讨论】:

【参考方案3】:

据我了解,您希望启动您的应用程序并且每次都会发生不同的事情,具体取决于您上次离开的位置。 http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html 活动生命周期在链接中。您的 onActivityDestroyed 方法需要以某种方式保持当前状态,并且 oncreate 需要将其恢复。持久性可以通过共享首选项、存储在文件、数据库或通过网络http://developer.android.com/guide/topics/data/data-storage.html 实现,如果实施不当,这种不可预测的行为可能会给最终用户造成混乱,因此请使用良好的判断力。

【讨论】:

以上是关于Android中维护标准应用Activity回栈状态(使用singleTask启动模式)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 应用程序中查找回栈活动?

活动回栈 FLAG_ACTIVITY_NEW_TASK

Android 深度链接 - 回栈

Android - 清除导航回栈

图片模式下 Android O 图片的任务列表和回栈

如何控制Android回栈