Android之支持多进程、多线程的TrayPreferences代替SharedPreferences 的总结
来源:互联网 发布:vba编程基础知识 编辑:程序博客网 时间:2024/06/15 06:35
一、简单介绍SharedPreferences
SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。
SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下:
一个简单的存储代码如下:
SharedPreferences sharedPreferences = getSharedPreferences("wujay", Context.MODE_PRIVATE); //私有数据
Editor editor = sharedPreferences.edit();//获取编辑器
editor.putString("name", "chenyu");
editor.putInt("age", 4);
editor.commit();//提交修改
生成的wujay.xml文件内容如下:
分析以下几个方法:
方法的第二个参数指定文件的操作模式,共有四种操作模式。
四种操作模式分别为:
1. MODE_APPEND: 追加方式存储
2. MODE_PRIVATE: 私有方式存储,其他应用无法访问
3. MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取
4. MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入
editor存储对象采用key-value键值对进行存放,editor.putString("name", "chenyu");
通过commit()方法提交数据
与之对应的获取数据的方法:
getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
如果你想要删除通过SharedPreferences产生的文件,可以通过以下方法:
举例,假如有个<package name>为com.wujay.action下面的应用使用了下面语句创建了Preference,getSharedPreferences("wujay", Context.MODE_WORLD_READABLE),
现在要访问该Preferences:
首先,需要创建上面的Context,然后通过Context访问Preferences,访问preference时会在应用所在包下的shared_prefs目录找到preference:
Context otherAppsContext = createPackageContext("com.wujay.action", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("wujay", Context.MODE_WORLD_READABLE);
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 0);
如果不通过创建Context访问其他应用的preference,可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如:
File xmlFile = new File(“/data/data/<package name>/shared_prefs/itcast.xml”);//<package name>应替换成应用的包名。
SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下:
一个简单的存储代码如下:
SharedPreferences sharedPreferences = getSharedPreferences("wujay", Context.MODE_PRIVATE); //私有数据
Editor editor = sharedPreferences.edit();//获取编辑器
editor.putString("name", "chenyu");
editor.putInt("age", 4);
editor.commit();//提交修改
生成的wujay.xml文件内容如下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><string name="name">chenyu</string><int name="age" value="4" /></map>
分析以下几个方法:
1、getSharedPreferences(name,mode)
方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上;方法的第二个参数指定文件的操作模式,共有四种操作模式。
四种操作模式分别为:
1. MODE_APPEND: 追加方式存储
2. MODE_PRIVATE: 私有方式存储,其他应用无法访问
3. MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取
4. MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入
2、edit()方法获取editor对象
Editor editor = sharedPreferences.edit();editor存储对象采用key-value键值对进行存放,editor.putString("name", "chenyu");
通过commit()方法提交数据
与之对应的获取数据的方法:
SharedPreferences share = getSharedPreferences("SharedPreferences",Activity.MODE_WORLD_READABLE);int i=share.getInt("i",0);String str=share.getString("str","");boolean flag=share.getBoolean("flag",false);
getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
如果你想要删除通过SharedPreferences产生的文件,可以通过以下方法:
File file= new File("/data/data/"+getPackageName().toString()+"/shared_prefs","Activity.xml");if(file.exists()){file.delete(); Toast.makeText(TestActivity.this, "删除成功", Toast.LENGTH_LONG).show(); }
3、访问其他应用中的Preference
如果要访问其他应用中的Preference,必须满足的条件是,要访问的应用的Preference创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。举例,假如有个<package name>为com.wujay.action下面的应用使用了下面语句创建了Preference,getSharedPreferences("wujay", Context.MODE_WORLD_READABLE),
现在要访问该Preferences:
首先,需要创建上面的Context,然后通过Context访问Preferences,访问preference时会在应用所在包下的shared_prefs目录找到preference:
Context otherAppsContext = createPackageContext("com.wujay.action", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("wujay", Context.MODE_WORLD_READABLE);
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 0);
如果不通过创建Context访问其他应用的preference,可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如:
File xmlFile = new File(“/data/data/<package name>/shared_prefs/itcast.xml”);//<package name>应替换成应用的包名。
二、简单介绍TrayPreferences
1、介绍:
在github上看到了一个 android SharedPreferences 的替代方案Tray,学习了一下。特性基于ContentProvider的多线程的数据存储方案支持多线程、多进程
2、使用原因:
在我们的项目里面有在service里面单独开了一根进程,所以项目就有2根进程,不同进程之间Application数据不共享,有的时候我们使用一般的SharedPreferences在这边进程保持了,然后到那边进程去拿有可能拿不到,所以今天就用支持多进程、多线的TrayPreferences代替Android的 SharedPreferences
3、简单使用:
我们先得导入Tray.jar这个包,猛戳这个下载连接Tray.jar
封装代码如下:
public class AppPrefs {/** * 继承TrayPreferences以修改模块名 */private static class TrayEMMPrefs extends TrayPreferences {public TrayEMMPrefs(Context context) {super(context, MODULE, VERSION);}}private EMMPrefs(Context context) {}private static TrayEMMPrefs getPrefs(Context context) {if (mPrefs == null) {synchronized(PrefsSyncObject) {if (mPrefs == null) {mPrefs = new TrayEMMPrefs(context);}}}return mPrefs;}/** * 设置可被多个进程共享的Boolean值 */public static void putSharedBoolean(Context context, String key, boolean value) {TrayEMMPrefs prefs = getPrefs(context);prefs.put(key,value);}/** * 设置可被多个进程共享的Int值 */public static void putSharedInt(Context context, String key, int value) {TrayEMMPrefs prefs = getPrefs(context);prefs.put(key,value);}/** * 设置可被多个进程共享的Long值 */public static void putSharedLong(Context context, String key, long value) {TrayEMMPrefs prefs = getPrefs(context);prefs.put(key,value);}/** * 设置可被多个进程共享的String值 */public static void putSharedString(Context context, String key, String value) {TrayEMMPrefs prefs = getPrefs(context);prefs.put(key,value);}/** * 获取可被多个进程共享的Boolean值,缺省值为false */public static boolean getSharedBoolean(Context context, String key) {return getSharedBoolean(context, key, false);}/** * 获取可被多个进程共享的Boolean值,若key不存在,则返回defaultValue */public static boolean getSharedBoolean(Context context, String key, boolean defaultValue) {TrayEMMPrefs prefs = getPrefs(context);return prefs.getBoolean(key, defaultValue);}/** * 获取可被多个进程共享的Int值,若key不存在,则返回0 */public static int getSharedInt(Context context, String key) {return getSharedInt(context, key, 0);}/** * 获取可被多个进程共享的Int值,若key不存在,则返回defaultValue */public static int getSharedInt(Context context, String key, int defaultValue) {TrayEMMPrefs prefs = getPrefs(context);return prefs.getInt(key, defaultValue);}/** * 获取可被多个进程共享的Long值,若key不存在,则返回0 */public static long getSharedLong(Context context, String key) {return getSharedLong(context, key, 0);}/** * 获取可被多个进程共享的Long值,若key不存在,则返回defaultValue */public static long getSharedLong(Context context, String key, long defaultValue) {TrayEMMPrefs prefs = getPrefs(context);return prefs.getLong(key, defaultValue);}/** * 获取可被多个进程共享的Int值,若key不存在,则返回null */public static String getSharedString(Context context, String key) {return getSharedString(context, key, null);}/** * 获取可被多个进程共享的Int值,若key不存在,则返回defaultValue */public static String getSharedString(Context context, String key, String defaultValue) {TrayEMMPrefs prefs = getPrefs(context);return prefs.getString(key, defaultValue);}public static void remove(Context context, String key) {TrayEMMPrefs prefs = getPrefs(context);if (key != null) {prefs.remove(key);}}/** * 清除配置文件 */public static void clear(Context context) {TrayEMMPrefs prefs = getPrefs(context);prefs.clear();}}如果我们需要保持一个值为 int类型数据
AppPrefs.putSharedInt(this,"chenyu",1);
取值
int a = App.getSharedInt(this,"chenyu",0);
妈妈再也不担心由于多继承SharedPreferences 拿不到数据了。
1 1
- Android之支持多进程、多线程的TrayPreferences代替SharedPreferences 的总结
- 最新Android之支持多进程、多线程的TrayPreferences代替SharedPreferences 的总结
- 多进程开发过程中sharedpreferences 数据共享问题的解决方案——TrayPreferences
- SharedPreferences支持多进程
- Android中SharedPreferences的总结
- Android下多进程访问SharedPreferences遇到的坑
- android:process 和多进程访问 SharedPreferences 的坑
- Android之SharedPreferences 的用法
- 取代SharedPreferences的多进程解决方案(转载)
- 源码分析多进程下的SharedPreferences
- Android之Android的数据存储--SharedPreferences
- 对SharedPreferences的总结
- 多线程/多进程的使用场景-Android
- Android开发之SharedPreferences的使用
- Android之SharedPreferences的基本用法
- android开发笔记之SharedPreferences的使用
- Android进阶之SharedPreferences的基本用法
- Android开发之SharedPreferences的使用
- MipMap的LOD实现原理
- 编译过程
- uc-osII实时操作3
- 那些强悍的PHP一句话后门
- Eclipse修改Project的目录位置
- Android之支持多进程、多线程的TrayPreferences代替SharedPreferences 的总结
- jQuery中文入门指南,翻译加实例,jQuery的起点教程
- Poj 3469 Dual Core CPU【最小割最大流-----Dinic】
- 浅析补码
- android Matrix.setRotate 和 postRotate的区别
- jQuery 快速入门教程
- #76 Longest Increasing Subsequence
- ArrayList用法
- 游戏中自动攻击最近目标、二次连击和群体攻击的大体代码思路