管理应用程序状态

时间:2013-04-19 15:58:07

标签: android android-activity android-lifecycle

Android Activity的生命周期让我有点头疼。

我想在应用程序进入后台之前存储显示的最后一个Activity,这样我就可以在用户恢复应用时恢复正确的状态。 问题是,为什么应用程序进入后台并且并非所有操作都执行相同的操作有多种可能性。

为了清楚起见,假设我有3个活动; A-1,A-2和A-3(A-2是进入A-3)。 A-2和A-3只是正常活动,但A-1是各种调度员。它是清单文件中的启动器活动,它唯一的功能是读取SharedPreference其他两个在onPause()方法中设置的this.finish(),它基本上表示最后一个活动是什么,并激活该活动然后拨打onPause()。直截了当。

场景是(在所有这些用户从后台进程列表或启动器重新启动应用程序之后):

  1. 在A-3中,用户点击“返回”按钮并进入主屏幕。对于A-3,这会运行onDestroy(),然后运行onPause()
  2. 在A-3中,用户点击“主页”按钮并进入主屏幕。对于A-3,这会运行onSavedInstanceState(),然后是onPause()
  3. 用户执行上述两项操作之一,然后显示后台进程列表并强制终止该应用。没有代码被执行。
  4. 操作系统检测到它需要释放内存,所以首先(两个)强行杀死 后台进程然后,如果这是不够的力量杀死 目前正在进行中。
  5. 现在在每种情况下都会发生以下情况:

    1. 启动A-1,它会读取onSavedInstanceState中设置的首选项并按原样启动A-3。按设计工作(但可能不是最佳方式)。
    2. 启动A-1,并执行与上述相同的操作。
    3. 现在事情变得棘手了。当应用程序重新启动时,没有任何迹象表明它已被终止,因此A-1读取首选项,然后在它应该启动A-2时启动A-3。 这是不受欢迎的,会破坏应用
    4. 与3号相似。
    5. 我的问题是,在这种情况下如何最好地管理应用程序状态

      在应用程序运行时,传递到{{1}}的捆绑包是否仍然存在,因此这只是在“会话”期间保存此类信息的最佳方式

1 个答案:

答案 0 :(得分:0)

如果我理解你需要什么,那么你可以简单地覆盖A-3的onBackPressed(),以便修改SavedPreferences,当用户重新启动应用程序时,它将打开A-3。

在第二种情况下,您不需要保存任何内容,因为应用程序未关闭,它只放在后台。当用户重新进入应用程序时,操作系统将自动重新激活上一个活动活动 - A-3。

案例3& 4(可能在它被放入后台,如案例2),如果应用程序被强制杀死,那么你就不会修改SavedPreferences,因为用户没有点击回来。