

GitHub - sevenshal/oksharedprefs: 通过注解生成SharedPreferences包装类,解决跨进...
source link: https://github.com/sevenshal/oksharedprefs
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

oksharedpref
通过注解生成SharedPreferences实现的工具。解决安卓SharedPreferences多进程数据访问不一致的问题。
- 让你告别手写包装代码管理SharedPreferences,通过注解的方式定义SharedPreferences包装类,使你可以方便的通过get/set方法操作SharedPreferences。
- 现在看来,安卓官方基本放弃了解决SharedPreferences跨进程访问不一致这一问题了,跨进程访问数据官方更加推荐ContentProvider。
- OkSharedPrefs将SharedPreferences和ContentProvider结合起来,让你使用SharedPreferences更加方便,并且通过ContentProvider交换数据,解决了跨进程数据访问不一致的问题。
- 底层仍然使用系统SharedPreferences实现,所以你的应用之前没有使用oksharedprefs,你可以很方便的移植,在新版本中加入这个库,已安装用户的原有数据不会有任何影响。
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
dependencies {
compile 'com.github.sevenshal.oksharedprefs:api:1.0.1'
annotationProcessor 'com.github.sevenshal.oksharedprefs:processor:1.0.1'
}
定一个interface类并且如下所示添加注解:
@SharedPreference(value = "Msg", implSharedPreference = false, preferenceName = "msg", multiProcess = false)
public interface IMsg {
@DefaultValue(value = "null", createDefaultGetter = false)
String USERID = "userId";
@Type(PreferenceType.STRING_SET)
@DefaultValue(value = "null", createDefaultGetter = false)
String TOKEN = "token";
@Type(PreferenceType.LONG)
@DefaultValue(value = "0", createDefaultGetter = false)
String DEVICE_ID = "deviceId";
@Type(PreferenceType.BOOLEAN)
@DefaultValue(value = "false", createDefaultGetter = false)
String LOGIN = "hasAuth";
String NICK_NAME = "nickName";
}
然后就可以直接使用生成的包装类了:
MsgPrefs msgPrefs = MsgPrefs.defaultInstance(this);
long deviceId = msgPrefs.getDeviceId();
String userId = msgPrefs.getUserid();
boolean login = msgPrefs.isLogin();
String nickName= msgPrefs.getNickName("未命名");
msgPrefs.prefs().registerOnSharedPreferenceChangeListener(this);
Set set = new HashSet<String>();
set.add("a");
set.add("b");
msgPrefs.edit().setDeviceId(111).setLogin(true).setUserid("userid").setToken(set).apply();
生成的类的名称通过 @SharedPreference 的 value属性定义。生成的类名称为 value+Prefs,比如
@SharedPreference(value = "Msg") 将生成 MsgPrefs 类。
如果你不希望以Prefs结尾,可以通过preferencesSuffix属性修改。
@SharedPreference(value = "Msg", preferencesSuffix = "Preferences") 将生成 MsgPreferences类。
OkSharedPrefs生成的包装类默认实现了SharedPreferences接口, 这在key值通过变量方式存取时很方便,如果不希望生成的类实现SharedPreferences接口, 可以通过将 implSharedPreference 设置为 false,关闭该功能。此种情况下,可以通过生成的类的prefs()获取SharedPreferences接口实例。
默认的SharedPreferences文件名为default_preferences,你可以通过 preferenceName 修改。
默认生成的包装类不支持跨进程,但是可以通过将 multiProcess 设置为true打开该功能,默认关闭该功能是出于性能考虑,减少生成不必要的代码。
生成的包装类是单例模式的,因为安卓底层SharedPreferences也是全局单实例的,所以不会单例模式并不会带来性能问题。 考虑到在插件化系统中Context可能会做隔离的使用场景,你仍然可以通过 new MsgPrefs(context)的方式来使用。 甚至可以new MsgPrefs(context,name)来通过相同结构的包装类管理不同的属性文件,这对那种多用户数据管理的app很有用。
所有属性默认类型是String类型,通过为interface的属性添加 @Type(PreferenceType.LONG) 来修改类型。支持完整的SharedPreferences数据类型。
通过 @DefaultValue(value = "null", createDefaultGetter = false) 可以设置默认值,以及是否生成默认值取值方法。 createDefaultGetter的取值意义在于你是希望通过 msgPrefs.getNickName("自定义默认值") 还是 msgPrefs.getNickName() 获取数据。如果你在编码期间不确定默认值是什么,那需要将createDefaultGetter设为true。
</article
Recommend
-
31
Java 注解 Java 注解学习笔记,原文: Java中的注解原来是这样回事的 内置注解 @Override @Deprecated...
-
60
上篇文章研究 Spring XML Schema 扩展进制 ,这段时候一直研究 Spring 注解编程的原理。原本以为有了之前研究基础,可以很快理解注解编程原理。没想到这个过程非常困难,...
-
45
在上篇文章 Spring 注解编程之模式注解 中我们讲到 Spring 模式注解底层原理,依靠 AnnotationMetadata 接口判断是否存在指定元注解。
-
54
前两篇文章咱聊了深入了解了 Spring 注解编程一些原理,这篇文章我们关注注解属性方法,聊聊 Spring 为注解的带来的功能,属性别名与覆盖。 注解属性方法 在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java...
-
61
有一些小伙伴觉得 MyBatis 只有方法中存在多个参数的时候,才需要添加 @Param 注解,其实这个理解是不准确的。即使 MyBatis 方法只有一个参数,也可能会用到 @Param 注解。 但是,在你总结出规律之前,你可能会觉得莫名其...
-
38
Reflection 今天来挑战一下 如何在2000字以内把Reflection作用说明白 ? Reflection is commonly used by programs which require the ability to examine or modify the runtime behavior of app...
-
38
JvmName注解是Kotlin提供的一个可以变更编译器输出的注解,这里简单的介绍一下其使用规则。 应用在文件上 未应用@JvmName 1 2 3 4 5 6 7 8 package com.example.jvmannot...
-
52
JvmMultifile 注解在 Kotlin 中的应用 Sep 8th, 2019 接触过Kotlin之后,我们会利用其扩展方法特性创建很多便捷的方法来实现更好更快的编码。比如我们对于RxJava进行一些简单的扩展方法实现。 下...
-
44
来一点咖啡,准备好进入注解的世界。 注解一直是 Java 的一个非常重要的部分,它从 J2SE 5.0 开始就已经存在了。在我们的应用程序代码中,经常看到 @Override 和 @Deprecated 这样的注解。在本文中,...
-
21
ginprc golang gin 参数自动绑定工具 支持rpc自动映射...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK