在后台服务使用活动类的静态成员(Using Activity class static member

2019-11-01 18:26发布

我的应用程序有一个名为MainActivity一个Activity类及其成员之一

public static SharedPreferences prefsdefault;

我的应用程序也有它在后台运行一个服务(在另一个进程)。 里面的服务,我写

MainActivity.prefsdefault.getString(Key,"Hello");

该应用程序有时在该行抛出空指针异常。 为什么? 这是否意味着该成员是由垃圾收集清理,当我关闭活动和(当我的服务运行),我不能随时访问它? 那么,什么是这个完美的解决方案?

我应该通过MainActiviy.class的服务? 当我实现需要一个上下文一个线程这也恰好。

Answer 1:

这是因为,即使你的prefsdefault可能已被初始化一次,你的整个应用程序可以被垃圾收集,并再次重新启动。

在这种情况下,你的服务就会发现场为空。 使用内活动静态字段是错误的一堆原因,其中最重要的是你的应用程序可以被杀死,由操作系统,之后所有的静态字段再次全军覆没重新启动。

使用共享偏好正确的方法是,当您需要访问/写入使用getSharedPreferences访问它们。

另一个奇怪的是,你说该服务在另一个进程中运行。 在这种情况下,它不应该是能够从另一个进程对数据的访问。



Answer 2:

由于prefsdefaultNULL 。 我没有看到它被初始化。 你可以做到这一点的

prefsdefault = getSharedPreferences("my_preferences", Activity.MODE_PRIVATE);

热点提示:不要让你的SharedPreference例如静态的



Answer 3:

这样做的原因是SharedPreferences将不会被初始化ü不需要做这样的SharedPreferences是全球可用的应用程序,如果模式为专用刚刚创造服务新的实例,以及它会工作



文章来源: Using Activity class static members in a background service