Android - 停止/销毁应用程序后访问SharedPreferences

时间:2015-08-20 12:32:35

标签: android sharedpreferences android-intentservice

我实施通知以及定期警报,在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中检索值?

1 个答案:

答案 0 :(得分:2)

prefs = PreferencesManager.getInstance(this)来电后,将onHandleIntent()行移至onCreate(),或移至super.onCreate()方法。

  

为什么我没有构造函数的上下文?

你有一个Context。它还没有完全初始化。在相关组件的继承Context完成之前,切勿尝试使用onCreate()。在这种情况下,组件是Service,因此一旦super.onCreate()结束,然后就可以安全地使用Service来检索SharedPreferences对象。