SharedPreferences不会在具有自己进程的服务中应用()或commit()

时间:2014-09-10 14:38:37

标签: android service android-asynctask sharedpreferences

我有一个Service,它有自己的流程:

<service
    android:name=".services.Commander"
    android:label="@string/commander"
    android:process=":commander_process" >
</service>

在此服务中,使用AsyncTask执行executeOnExecutor。在onPostExecute方法中,我想使用以下代码编写数据:

SharedPreferences prefs = getSharedPreferences("MY_APP_KEY", Context.MODE_PRIVATE);
prefs.edit().putString(Constants.PREF_KEY_APP_PASSWORD, MD5.get(password)).apply();

但是,此代码没有效果,并且prefs不会更新。我也尝试了commit()而不是apply(),但它也没有用。然后我尝试了MODE_MULTI_PROCESS而不是MODE_PRIVATE

SharedPreferences prefs = getSharedPreferences("MY_APP_KEY", Context.MODE_MULTI_PROCESS);

它没有用。

我的代码适用于Android 2.3.6,但它不适用于Android 4.2.2。我该如何解决?

1 个答案:

答案 0 :(得分:2)

不幸的是,即使使用SharedPreferencesprocess-safe也不是MODE_MULTI_PROCESS。所以我使用与我的主要活动相同的过程运行Service,现在它正常运行。我更改了manifest xml:

中的代码
<service
    android:name=".services.Commander"
    android:label="@string/commander" >
</service>