保存Android应用程序状态

4
我知道如何通过使用SharedPreferences、onSavedInstanceState()和onRestoreInstanceState()等方法保存应用程序状态,就像在类似的帖子中所概述的那样(使用Save Instance State保存Android Activity状态),但是我该如何保存最后一个活动状态呢?
更具体地说,我的应用程序启动并进入登录界面。一旦用户登录并浏览了几个活动页面,假设他或她使用主页按钮或其他方式离开了应用程序。下次用户启动应用程序时,它将返回到登录界面并再次登录。相反,我希望应用程序在启动时直接进入上次用户离开应用程序时栈顶的最后一个活动页面。
如何保存最后一个活动状态以便在应用程序启动时恢复?
3个回答

2

我相信 Android 会自动完成这个功能。我们正在开发一个应用程序,当我点击主页按钮并返回应用程序时,它会在我离开的活动中重新开始。我们没有编写任何代码来实现这一点,似乎它就是自动完成的。


我认为Jay说得对,我查看了我的清单文件,并注意到在我的主活动下有以下内容: <category android:name="android.intent.category.LAUNCHER" />该属性的文档说明如下:“该活动可以是任务的初始活动,并列在顶级应用程序启动器中。”删除此行就解决了问题,谢谢! - jlim
3
如果您移除“LAUNCHER”类别,那么启动应用程序的功能不就丧失了吗? :) - Christopher Orr
移除 LAUNCHER 不起作用,它显示了“未找到活动”警告。 - tejas

2

1
请注意,上述答案仅在一种情况下正确:如果您的进程没有被Android杀死,因为资源(内存等)需要用于不同的原因。
为了实现您所描述的功能,我会编写一个自定义的父活动,并覆盖正确的生命周期方法来存储您的应用程序状态并读取它并相应地采取行动。然后让所有的活动都继承自MyActivity(而不是android.app.Activity)。

public MyActivity extends android.app.Activity {
...
@Override
public onCreate(...) {
  // Read the Application state, 
  // check if the currently launching Activity is the right one, 
  // if not, start the last Activity and finish the current one.
}

@Override
public onDestroy(...) {
  // Store the current Activity ID in the SharedPreferences
}
...
}

请注意在所有的活动中调用super.onDestroy和super.onCreate方法(就像你本来应该做的那样)。

祝编程愉快,享受Android!


1
但是,您编写的每个 Activity 中要保存的状态肯定是不同的,因此没有必要使用自定义父类。此外,您应该只使用 jylc08 链接到的问题中展示的技术,因为 onDestroy 仅在您 finish() 一个 Activity(或系统将其杀死)时才会被调用。同样,如果 Activity 已经在任务堆栈中,则仅会调用 onCreate - Christopher Orr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接