Mou*_*ari 19 service android ipc multiprocessing sharedpreferences
我已经定义了SharedPreferences在多进程模式上使用的实例.
public class Prefs {
private static SharedPreferences prefs;
private static SharedPreferences.Editor editor;
private static void init(Context context) {
prefs = context.getSharedPreferences("alaki",
Context.MODE_MULTI_PROCESS);
editor = prefs.edit();
}
// static methods to set and get preferences
}
Run Code Online (Sandbox Code Playgroud)
现在我在一个服务上使用这个类,使用单独的进程,也在我的主应用程序进程中以静态方式使用.
一切进展顺利,但有时会删除SharedPreferences实例上的所有存储数据!
我怎么解决这个问题?
编辑:最后我用IPC解决了我的问题.
Ahm*_*azy 34
目前无法安全访问SharedPreferences多个进程,如其文档中所述.
注意:此类不支持跨多个进程使用.
在经过大量测试后MODE_MULTI_PROCESS,我将分享三个试验:
1- 在每个过程中初始化SharedPreferences一次并多次使用它.
问题:这些值未按预期反映在每个流程中.因此每个进程都有自己的SharedPreferences值.
2- 初始化SharedPreferences每个put或get.
这实际上有效,现在价值可以在流程之间互换.
问题:有时在积极访问sharedpref之后,共享首选项文件被删除了所有内容,如本期所述,我在日志中收到此警告:
W/FileUtils? Failed to chmod(/data/data/com.hegazy.multiprocesssharedpref/shared_prefs/myprefs.xml): android.system.ErrnoException: chmod failed: ENOENT (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
您可以在问题中找到这种情况的原因.
3- 使用同步来锁定放入和获取值的方法SharedPreferences.
这是完全错误的; 同步不适用于进程.在SharedPreferences实际使用同步在执行,但只保证线程安全,不处理的安全性.这被描述得非常好这里.
| 归档时间: |
|
| 查看次数: |
12854 次 |
| 最近记录: |