Preferences
基于Kotlin委托实现了SharedPreferences
支持多进程、数据加解密、MMKV,另外对原生SharedPreferences
进行Hook优化降低ANR,缓存优化。
- 支持多进程
- 支持MMKV无缝接入
- 支持sp和mmkv的getAll方法
- 支持数据加解密(基于androidx.security)
https://github.com/forJrking/Preferences 请start表示对我的支持哦!
- 添加依赖
repositories {
...
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.forjrking.pref:pref-core:2.0.0' // 必须
implementation 'com.github.forjrking.pref:pref-gson:2.0.0' // 非必须
implementation 'com.github.forjrking.pref:pref-ktx:2.0.0' // 非必须
implementation 'com.google.code.gson:gson:2.8.5' //存储对象需要(非必须)
implementation 'com.tencent:mmkv-static:1.2.1' // mmkv支持加密和多进程(非必须)
implementation 'androidx.security:security-crypto:1.0.0' // sp加密支持(非必须)
}
// 必须Application 中初始化, 依赖了pref-gson会自动初始化
PreferenceHolder.context = this.context
// 非必须 如果使用MMKV请初始化并且配置相关
MMKV.initialize(this) ...
// 非必须 用于序列化对象和集合等数据,sp不建议存大量数据, 依赖了pref-gson会自动初始化
PreferenceHolder.serializer = GsonSerializer()
- 写一个object类,必须使用kt
object TestSP : PreferencesOwner() {
var value: Long by preferenceBinding(0L)
var objCase: Game? by preferenceNullableBinding()
}
// 存入sp
TestSP.value = 100
// 读取sp
val value = TestSP.value
println(value) // 0 or 100
// getAll
TestSP.getAll()?.forEach {
Log.d("TAG", "name:${it.key} value:${it.value}")
}
- 其他api演示
/*
* @param name xml名称 默认为实现类类名,为了防止不同类使用相同字段覆盖数据问题
* @param cryptKey 加密密钥 null 表示不用加密 需要api >= 23
* @param isMMKV 是否使用mmkv 默认false
* @param isMultiProcess 是否使用多进程 建议mmkv sp性能很差 默认false
*/
object TestSP : PreferencesOwner("name","cyptKey",isMMKV,isMultiProcess) {
//带默认值 == getString(key,default) 不可赋值 null
var testStr: String by preferenceBinding('default')
var coin: Long by preferenceBinding(0L)
var tes: String? by preferenceNullableBinding() //默认值为 null 可以为其赋值 null
//支持所有sp支持的数据类型 以及 object 需要初始化上一步的 GsonSerializer
var savedGame: Game? by bindToPreferenceFieldNullable()
}
//getValue 读取sp
val str = TestSP.testStr
val coin = TestSP.coin
println(str) //"" or "something"
//setValue 存入sp
TestSP.testStr = "AX${Random().nextInt(20)}"
TestSP.coin = 100