Android:Activity将变量保存在内存中

时间:2012-12-24 05:36:28

标签: android android-activity

有一个Activity和一些变量。它们是从前一个传递过来的。 senerio是: - 当用户单击主页按钮并返回主屏幕时,用户单击应用程序图标一段时间后返回应用程序,应用程序崩溃。我认为这是因为Android系统杀死了活动或其他东西,然后它尝试执行onCreate(),不幸的是有NullpointerException因此应用程序崩溃。

有任何想法可以解决这个问题,或者我应该怎么做这个例外? 谢谢。

请允许我提前祝你圣诞快乐。

1 个答案:

答案 0 :(得分:1)

当您按下“home”时,控制将转到Home应用程序,并将当前应用程序推送到后台。 Android可能随时终止进程以回收内存。

当你返回Activity时,它可能是同一个实例(如果Android没有杀死进程),或者它可能是Activity的新实例。

如果内存非常紧张并且你从一个Activity向前推进,也会发生同样的事情;活动可以发布。当您按Back时,可能会遇到同样的问题。

如果要保留数据,则应使用onSaveInstanceState(Bundle)来存储要恢复的任何数据。

请注意,onCreate()将Bundle作为参数。如果活动暂停(例如当您按Home时发生),则调用onSaveInstanceState()以允许您临时存储数据,并将相同的数据传递回onCreate()。如果正在重新启动Activity,那么该bundle将为null。

所以你应该这样做:

public void onSaveInstanceState(Bundle bundle) {
    super.onSaveInstanceState(bundle);
    // store data in the bundle
}
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        // read old data from the Bundle
    } else {
        // you're starting clean; no saved data
    }
    ...
}

一些注意事项:

  • 存储在Bundle中的所有数据必须是原始的,可序列化的或更好的,Parcelable
  • 安装了android:id的Android视图中的数据会自动存储在包中并在重新创建活动时进行检索(例如,将为您保存在EditText中输入的数据)
  • 不属于其他数据且Android View不会自动保存,自定义视图中的数据也不会保存

希望这有帮助!