我的应用程序有一个名为MainActivity一个Activity类及其成员之一
public static SharedPreferences prefsdefault;
我的应用程序也有它在后台运行一个服务(在另一个进程)。 里面的服务,我写
MainActivity.prefsdefault.getString(Key,"Hello");
该应用程序有时在该行抛出空指针异常。 为什么? 这是否意味着该成员是由垃圾收集清理,当我关闭活动和(当我的服务运行),我不能随时访问它? 那么,什么是这个完美的解决方案?
我应该通过MainActiviy.class的服务? 当我实现需要一个上下文一个线程这也恰好。
这是因为,即使你的prefsdefault可能已被初始化一次,你的整个应用程序可以被垃圾收集,并再次重新启动。
在这种情况下,你的服务就会发现场为空。 使用内活动静态字段是错误的一堆原因,其中最重要的是你的应用程序可以被杀死,由操作系统,之后所有的静态字段再次全军覆没重新启动。
使用共享偏好正确的方法是,当您需要访问/写入使用getSharedPreferences访问它们。
另一个奇怪的是,你说该服务在另一个进程中运行。 在这种情况下,它不应该是能够从另一个进程对数据的访问。
由于prefsdefault
为NULL
。 我没有看到它被初始化。 你可以做到这一点的
prefsdefault = getSharedPreferences("my_preferences", Activity.MODE_PRIVATE);
热点提示:不要让你的SharedPreference
例如静态的 。
这样做的原因是SharedPreferences
将不会被初始化ü不需要做这样的SharedPreferences
是全球可用的应用程序,如果模式为专用刚刚创造服务新的实例,以及它会工作