【问题标题】:After pressing home button saving the state of Activity按下home键后保存Activity的状态
【发布时间】:2012-10-19 17:50:39
【问题描述】:

我有两个活动,Activity1Activity2Activity1 是从头开始的启动器活动。现在,当我从activity2 按下主页按钮并再次从所有应用程序中打开应用程序时,Activity1 正在打开。我想打开在按下主页按钮时打开的同一个活动。我需要保存activity2的状态,但我没有任何线索。

我查看了thisthis,但我仍然没有清楚地了解如何执行此操作。请帮助我,因为我是 android 新手。

【问题讨论】:

  • 默认情况下,您尝试执行的操作应该有效。您发布的第一个链接应该会有所帮助。

标签: android state


【解决方案1】:

当您按下“主页”按钮时,您的活动将转到 onPause()

所以我个人建议你重写onPause() 方法,它不仅可以处理按下的“home”按钮,还可以处理其他情况。

在您的情况下,它仅与 onPause()onResume() 相关,因此您可以尝试将状态放入 SharedPreferences 或内部/外部存储。

说:

在您的 onPause() 方法中,执行以下操作:

// Use Shared Preferences to save data
SharedPreferences previewSizePref = getSharedPreferences("PREF",MODE_PRIVATE);
SharedPreferences.Editor prefEditor = previewSizePref.edit();
prefEditor.putInt("x", somethingA);
prefEditor.putInt("y", somethingB);
prefEditor.commit();

并在您的 onResume() 中检索保存的数据,例如:

SharedPreferences previewSizePref = getSharedPreferences("PREF",MODE_PRIVATE);
if (previewSizePref.contains("x") && previewSizePref.contains("y")) {
    //your saved data exists, do something
} else {
    // handle the circumstances that the saved data doesn't exist
}

要在onPause() 中保存状态并在onResume() 中恢复,您可以看看这个答案:

Saving Activity State in the onPause

对于 SharedPreferences,您可以查看 API 文档:Data Storage - Shared Preferences

【讨论】:

  • 我还需要覆盖onResume() 吗?
  • @Jai 是的,你需要覆盖onResume() 来恢复你的活动状态。
  • @Jai 啊,请等一下,我正在更新我的答案,我发现在你的情况下我给出的参考不合适。
  • @Jai 请检查更新后的答案,如果我之前的回答让您感到困惑,请见谅。
  • 如果我们在按下主页按钮后恢复应用程序,那么默认情况下它会恢复左侧活动状态。我说的对吗?
【解决方案2】:

您所描述的应该是 Android 行为的标准,如果它没有按照您所描述的那样做,那么您可能已经在其他地方覆盖了这种行为,可能在您的清单中。

如果您创建一个新的 Android 应用程序并制作一个简单的两页应用程序,其中 Activity A 作为启动器,Activity B 作为第二页,那么您的清单将如下所示,并且应用程序将显示您描述的行为。

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".ActivityA"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ActivityB"
        android:label="@string/title_activity_main" >
    </activity>
</application>

仔细检查您的清单是否与此相似 - 活动 B 没有标记,只是声明它存在于您的清单中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2012-01-14
    • 1970-01-01
    相关资源
    最近更新 更多