退出时如何保存 Activity 的状态?安卓

Posted

技术标签:

【中文标题】退出时如何保存 Activity 的状态?安卓【英文标题】:How do you save your Activity's state when exiting? Android 【发布时间】:2010-02-22 03:30:18 【问题描述】:

我有一个带有文本输入、一个微调器输入和第二个微调器输入的基本应用程序,其数组取决于“选项”菜单中更改的设置。

目前,当我在应用程序中按 Home 或 Return 时,我要么返回桌面,要么循环返回最近输入的旧输入。

如何防止我的应用打开自身的多个实例,以便在任何给定时间只有一个实例在运行,然后如何保存输入到输入中的数据以及在我的选项菜单中选择的设置?

我对 Java 有点陌生,所以如果这是一个简单的问题,我深表歉意。

【问题讨论】:

【参考方案1】:

在您的活动中覆盖 onSaveInstanceState 和 onRestoreInstanceState。这些方法将允许您将数据保存到Bundle 您也可以将数据保存到Preferences。在我的所有应用程序中,我都覆盖了 onSaveInstanceState 和 onRestoreInstanceState 以将值保存和加载到 Bundle。我还将数据保存到 onPause 中的首选项并在 onResume 中加载首选项。同样在 onCreate(Bundle savedInstanceState) 我做这样的检查

    if(savedInstanceState != null)
    
        m_mainView.restoreInstanceState(savedInstanceState);
    
    else
    
        m_mainView.loadGameFromDatabase(getPreferences(MODE_PRIVATE));
    

这些做法一直对我有用。

【讨论】:

你能给我提供一个示例吗? onSaveInstanceState 在用户通过按返回或主页按钮明确存在应用程序时不会被调用。这只能在操作系统决定在没有您干预的情况下破坏您的活动时使用。【参考方案2】:

您必须在您的活动上使用onPause 覆盖方法并将您的数据保存在某处(可能是共享首选项)。 然后onResume 你必须从持久性存储中读回它们并填充你的控件。

onSaveInstanceStaterestoreInstanceState 不是您想要处理返回或主页按钮按下的朋友。

【讨论】:

我也遇到了这个问题。我认为这些答案很好,但可以通过一些示例和更明确的信息来缩小范围。对于我的示例,我的应用程序仅是纵向的,因此我不必担心为此保存,但是在返回家时,即使返回按钮也会杀死用户的文本视图数据,这是一种垃圾用户体验。我还没有找到描述在屏幕旋转之外做什么的信息......

以上是关于退出时如何保存 Activity 的状态?安卓的主要内容,如果未能解决你的问题,请参考以下文章

安卓:当我第一次点击APP时进入欢迎界面,之后退出再点击就应该直接进入主页面,这该怎么实现啊

用户退出应用程序时如何保存 Android CheckBox 的状态?

安卓中的finishAffinity()方法的使用场景

安卓中的finishAffinity()方法的使用场景

安卓中的finishAffinity()方法的使用场景

退出安卓应用