1

在我的应用程序类中,我有一个对象,由启动器屏幕启动的所有活动使用。问题是,在内存不足的情况下,系统会自动重新启动我的应用程序(我可以在设置 -> 应用程序 -> 运行进程选项卡中看到)。由于它正在重新启动(一旦应用程序处于后台就会发生),我一直使用的对象被重置为空。

我的场景:

在我的 Launcher Activity 中,我点击 DB 并在线程中获取值并使用 Setter & Getter 我在 Application 类中设置 Object 值。

设置后,我将从那里进行四个活动 A(Launcher) -> B -> C -> D

现在我正在后台运行,我的设备在低内存中运行,此时我的进程被终止并重新启动(即在后台)。

在重新启动时,我的对象被重置为 null,现在如果我从最近列表或通过启动器启动我的应用程序,它仍然会启动我在上述情况下进入后台的最后一个 Activity,它是 Activity D,我正在访问抛出空指针的对象。

我的问题是,

  1. 当系统杀死它时,有什么方法可以在应用程序类级别保存对象(就像我们在 Activity onSaveInstanceState 中所做的那样)。
4

2 回答 2

0

您可以执行类似使用 Shared Preferences 来保存有关对象的数据以便重建它的操作。(您也可以使用数据库、本地文件等)。

但是,如果我可以稍微偏离一下具体问题:您知道为什么您的应用程序因内存原因而被终止吗?您的目标是真正的低端设备或硬件吗?或者,也许您的应用程序需要进行一些优化以节省/重用内存?

于 2014-04-03T13:54:54.630 回答
-1

您保存对象的最后状态 onSaveInstanceState 并返回 onRestoreInstanceState 您可以在此最佳实践中找到有关重新创建 Activity 的所有信息。我建议你阅读活动生命周期

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    // Always call the superclass so it can restore the view hierarchy
    super.onRestoreInstanceState(savedInstanceState);

    // Restore state members from saved instance
    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
}
于 2014-04-03T14:11:56.677 回答