我实施通知以及定期警报,在IntentService上我需要验证SharedPreferences上的一些值,以决定是否显示通知。
当应用程序暂停时,我有上下文,一切正常,当我销毁(从#34;最近的应用程序"列表中删除)我的应用程序时,问题就出现了。 在这种情况下,警报仍在运行(这没关系),但是当它尝试加载我的共享首选项时,会给我NullPointerException。
IntentService:
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 ...
}
}
SharedPreferences
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中检索值?
答案 0 :(得分:2)
在prefs = PreferencesManager.getInstance(this)
来电后,将onHandleIntent()
行移至onCreate()
,或移至super.onCreate()
方法。
为什么我没有构造函数的上下文?
你有一个Context
。它还没有完全初始化。在相关组件的继承Context
完成之前,切勿尝试使用onCreate()
。在这种情况下,组件是Service
,因此一旦super.onCreate()
结束,然后就可以安全地使用Service
来检索SharedPreferences
对象。