android - SharedPreferences 不在具有自己进程的服务内 apply() 或 commit()

标签 android service android-asynctask sharedpreferences

我有一个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/

相关文章:

android - 将文件复制到另一个包文件夹(root,su)

java - threadid=1 : thread exiting with uncaught exception (group=0x4001d5a0)

java - 如何配置 rmi 服务导出端点地址?

java - 使用 Service、AsyncTask 和 Thread 制作智能 Android Media Player 应用

android - 如何在android中为Textview设置自动刷新?

android - Flutter 不选择基于 fontWeight 的自定义字体

android - 如何将经度和纬度(GPS坐标)发送到服务器

android - 通过全局变量通信服务和Activity

ember.js - Ember 生成的服务在注入(inject)时引发错误

java - 歌曲图像可以更快吗?