【发布时间】:2012-10-29 04:40:38
【问题描述】:
我声明了一个名为 PREFS 的非最终静态 SharedPreferences 对象以及我的 Constants.java 类中的其他常量:
public static SharedPreferences PREFS = null;
我这样做的原因是我的应用由大约 6 个不同的 AsyncTasks 组成,它们不断访问相同的共享首选项文件,我不想每次都得到 SharedPreferences 和它的 Editor。在我的应用程序第一次运行时,我在MainActivity 中调用getSharedPreferences() 并将其存储到PREFS,以便它在AsyncTasks 被触发之前指向一个实例,因此避免NullPointerException。
但是,无论如何,我一直从AsyncTasks 获得NullPointerExceptions。所有堆栈跟踪都指向我调用Constants.PREFS 以获取值的行。我的理论是,一段时间后,Android 会杀死我的应用程序的进程,所以下次我的任何AsyncTasks 的警报响起时,Constants.PREFS 的值已经是null。
我的问题是:我应该为Context 创建一个静态变量吗?即使 Android 终止了我的进程,它的状态是否会持续存在?我总是将Context 的引用传递给我的AsyncTasks,当后者被实例化时,它们可以调用getSystemService(),并且永远不会抛出NullPointerException。但是,我没有看到 Context 从 Android 文档中扩展 Serializable。
【问题讨论】:
标签: android static sharedpreferences android-context