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对象。