防止崩溃的最佳方法 "上下文为 NULL",当您关闭应用程序时随机发生



我注意到我的应用程序生成了类似Tried to access SharedPreferences but context is null object reference的错误。当用户在逻辑尝试访问需要对象Context的同一微秒关闭应用程序时,它们非常随机地发生。因此,应用关闭,但正在传递请求,并且该方法尝试使用上下文对象。发生的情况是应用关闭,但用户看到崩溃弹出窗口。

这在用户眼中看起来并不好。

现在,这里的错误是什么?我真的应该检查处理Context对象的每个方法的if (context != null)吗?在处理Context的每个方法中使用try/catch

或者,也许我应该放弃传递Activity Context的习惯并使用全局应用程序的上下文?

所以我问的是一个方向,如何成功解决所有这些问题,而不是如何在代码中做到这一点(后者真的很简单)。

使用可以绑定到整个应用程序的对象时,最好使用 getApplicationContext() 。 例如SharedPreferences。只有当您想在屏幕上显示某些内容(添加新片段、显示DialogFragment、需要FragmentManager实例的内容)时,您才需要活动上下文。

确保尊重活动/片段的生命周期,并且不会有空上下文。此外,您需要检查上下文是否为 null,如果您有异步请求,该请求可能会在活动被终止后返回。

您必须检查 2 件事:

  1. 上下文是否为空
  2. 如果您正在更改某些 UI 元素,是否允许您这样做。这基本上意味着您的活动处于恢复状态。

当您的活动收到对 onStop() 方法的调用时,它不是 更长的可见时间,应该释放几乎所有资源 [...]。一旦您的活动停止, 如果需要恢复系统,系统可能会销毁实例 记忆。在极端情况下,系统可能会简单地杀死您的应用程序 过程 [...]。

从 http://developer.android.com/training/basics/activity-lifecycle/stopping.html

@Override
protected void onStop() {
    super.onStop();
    // release resources (e.g. stop/pause async tasks etc)
}

最新更新