Android - 应用程序 stopped/destroyed 后访问 SharedPreferences
Android - Access SharedPreferences once application is stopped/destroyed
我将通知与定期警报一起实施,并且在 IntentService 上我需要验证 SharedPreferences 上的一些值以决定是否显示通知。
当应用程序处于暂停状态时,我有上下文,并且一切正常,当我销毁(从 "recent apps" 列表中删除)我的应用程序时,问题就来了。
在这种情况下,警报仍然是 运行(没关系),但是当它尝试加载我的共享首选项时,会出现 NullPointerException。
意图服务:
public class MyIntentService extends IntentService {
private final PreferencesManager prefs;
public SchedulingService() {
super("MyIntentService");
prefs = PreferencesManager.getInstance(this); //Error here
}
@Override
protected void onHandleIntent(Intent intent) {
// Do some checking with prefs variable ...
}
}
共享首选项
public class PreferencesManager {
public static final String SHARED_PREFERENCES_NAME = "PREFERENCES_PROJECT";
private static PreferencesManager preferencesManager = null;
private SharedPreferences sharedPreferences;
private PreferencesManager(Context context) {
sharedPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
public static PreferencesManager getInstance(Context context) {
if (preferencesManager == null) {
preferencesManager = new PreferencesManager(context);
}
return preferencesManager;
}
//....
}
当应用程序不是 运行 时如何从我的 PreferencesManager 检索值?
将 prefs = PreferencesManager.getInstance(this)
行移至 onHandleIntent()
,或 super.onCreate()
调用后的 onCreate()
方法。
why dont i have context on constructor?
你确实有 Context
。它还没有完全初始化。在相关组件的继承 onCreate()
完成之前,切勿尝试使用 Context
。在这种情况下,组件是 Service
,因此一旦 super.onCreate()
结束, 然后 可以安全地使用 Service
检索 SharedPreferences
对象。
我将通知与定期警报一起实施,并且在 IntentService 上我需要验证 SharedPreferences 上的一些值以决定是否显示通知。
当应用程序处于暂停状态时,我有上下文,并且一切正常,当我销毁(从 "recent apps" 列表中删除)我的应用程序时,问题就来了。 在这种情况下,警报仍然是 运行(没关系),但是当它尝试加载我的共享首选项时,会出现 NullPointerException。
意图服务:
public class MyIntentService extends IntentService {
private final PreferencesManager prefs;
public SchedulingService() {
super("MyIntentService");
prefs = PreferencesManager.getInstance(this); //Error here
}
@Override
protected void onHandleIntent(Intent intent) {
// Do some checking with prefs variable ...
}
}
共享首选项
public class PreferencesManager {
public static final String SHARED_PREFERENCES_NAME = "PREFERENCES_PROJECT";
private static PreferencesManager preferencesManager = null;
private SharedPreferences sharedPreferences;
private PreferencesManager(Context context) {
sharedPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
public static PreferencesManager getInstance(Context context) {
if (preferencesManager == null) {
preferencesManager = new PreferencesManager(context);
}
return preferencesManager;
}
//....
}
当应用程序不是 运行 时如何从我的 PreferencesManager 检索值?
将 prefs = PreferencesManager.getInstance(this)
行移至 onHandleIntent()
,或 super.onCreate()
调用后的 onCreate()
方法。
why dont i have context on constructor?
你确实有 Context
。它还没有完全初始化。在相关组件的继承 onCreate()
完成之前,切勿尝试使用 Context
。在这种情况下,组件是 Service
,因此一旦 super.onCreate()
结束, 然后 可以安全地使用 Service
检索 SharedPreferences
对象。