0

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

有什么想法可以解决这个问题,或者我应该如何处理这个异常?谢谢。

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

4

1 回答 1

1

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

当您返回 Activity 时,它可能是同一个实例(如果 Android 没有终止该进程),也可能是 Activity 的新实例。

如果内存非常紧张并且您从 Activity 向前推进,也会发生同样的事情;Activity 可以被释放。当您按返回时,您可能会遇到同样的问题。

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

请注意, onCreate() 将 Bundle 作为参数。如果 Activity 暂停(例如按下 Home 时发生),则调用 onSaveInstanceState() 以允许您临时存储数据,并将相同的数据传递回 onCreate()。如果 Activity 是新启动的,则该捆绑包将为空。

因此,您应该执行以下操作:

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 视图中设置了 android:id 的数据会自动存储在包中,并在重新创建 Activity 时检索(例如,将为您保存在 EditText 中键入的数据)
  • 不属于 Android View 的其他数据不会自动保存,您的自定义 View 中的数据也不会自动保存

希望这可以帮助!

于 2012-12-24T06:10:29.990 回答