Ton*_*Ton 9 android sharedpreferences
我使用SharedPreferences来编写并稍后在我的应用程序中的不同活动中读取值.它曾经工作正常,但最近它似乎没有被混合.我的意思是,我写了一个值但是其他活动仍然读取旧值.有时它会正常工作.任何的想法?
编辑:这是一个示例代码:
首先,从一个线程:
SharedPreferences prefs = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("ComandToDo", value);
editor.commit();
... some code later:
alarmmanager.set(AlarmManager.RTC_WAKEUP, Miliseconds, sender);
Run Code Online (Sandbox Code Playgroud)
在报警接收器中:
SharedPreferences prefs = contexto.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
int value = prefs.getInt("ComandToDo", -1);
Run Code Online (Sandbox Code Playgroud)
这就是问题所在,因为"value"不是线程中写的值.
这是我遇到的以及我做了什么来解决它.
我正在触发来自活动和广播接收器的警报,我正在更新每次启动应用程序时读取的共享首选项.
触发警报后,每当应用程序启动时,它将获得仅从该活动设置的旧值.没有反映出Broadcast-Receiver的变化.
这里的技巧是将Shared-Preferences设置为MODE_MULTI_PROCESS
通常我们使用MODE_PRIVATE,但执行如下操作:
SharedPreferences prefs = this.getSharedPreferences("Preferences", MODE_MULTI_PROCESS);
Run Code Online (Sandbox Code Playgroud)
注意:在代码中更改模式后,建议清除应用程序数据以避免在调试时出现问题.
编辑:MODE_MULTI_PROCESS需要min API 11
在API 11之前,我能想到的解决方法是创建一个包含2列KEY&VALUE的数据库.这可以从其他模块访问.
SharedPreferences 被记录为不能跨进程工作,http://developer.android.com/reference/android/content/SharedPreferences.html,“注意:当前此类不支持跨多个进程使用。稍后将添加。”
这个答案建议将数据封装到内容提供程序中,讨论还考虑了一些其他选项,包括共享 SQLite:https ://stackoverflow.com/a/5265556/1665128
文件系统中还有普通的旧文件。我们在几个项目中使用它们,带有锁定,没有任何问题。也许也是您的一个选择。
| 归档时间: |
|
| 查看次数: |
3274 次 |
| 最近记录: |