我有一个Service
,它有自己的流程:
<service
android:name=".services.Commander"
android:label="@string/commander"
android:process=":commander_process" >
</service>
在此服务内,使用 executeOnExecutor
执行 AsyncTask
。在其 onPostExecute
方法中,我想使用以下代码写入数据:
SharedPreferences prefs = getSharedPreferences("MY_APP_KEY", Context.MODE_PRIVATE);
prefs.edit().putString(Constants.PREF_KEY_APP_PASSWORD, MD5.get(password)).apply();
但是,此代码没有任何效果,首选项也不会更新。我还尝试了 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。我该如何修复它?
最佳答案
不幸的是,即使在使用MODE_MULTI_PROCESS
之后,SharedPreferences
也不是进程安全
。因此,我使用与主要 Activity 相同的流程运行 Service
,现在它可以正常工作了。我更改了 manifest
xml 中的代码:
<service
android:name=".services.Commander"
android:label="@string/commander" >
</service>
关于android - SharedPreferences 不在具有自己进程的服务内 apply() 或 commit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768300/