Skip to content

Commit

Permalink
优化SP代码
Browse files Browse the repository at this point in the history
  • Loading branch information
Fizzzzer committed May 14, 2024
1 parent 1c498ab commit 01db4fc
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ import java.io.Serializable
*/
interface ISharedPreferences {

fun file(fileName: String?): ISharedPreferences

fun putString(key: String, value: String)

fun getString(key: String, defaultValue: String): String
Expand Down
10 changes: 5 additions & 5 deletions FizzerBaseLib/src/main/java/com/fizzer/base/lib/sp/MMKVImpl.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.fizzer.base.lib.sp

import android.content.Context
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.tencent.mmkv.MMKV
Expand All @@ -11,18 +12,17 @@ import java.io.Serializable
* @Date: 2022/9/13
* @Description: MMKV实现类
*/
internal class MMKVImpl : ISharedPreferences {
internal class MMKVImpl(private var context: Context, fileName: String?) : ISharedPreferences {

private var kv = MMKV.defaultMMKV()


override fun file(fileName: String?): ISharedPreferences {
if (fileName?.isNotEmpty() == true) {
init {
if(fileName?.isNotEmpty() == true){
kv = MMKV.mmkvWithID(fileName)
}
return this
}


override fun putString(key: String, value: String) {
kv.encode(key, value)
}
Expand Down
7 changes: 0 additions & 7 deletions FizzerBaseLib/src/main/java/com/fizzer/base/lib/sp/SPImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,6 @@ internal class SPImpl(context: Context, private var defaultFileName: String) : I
mEditor = mSP?.edit()
}

override fun file(fileName: String?): ISharedPreferences {
val tmpFile = fileName.isNullOrEmpty().yes { defaultFileName }.otherwise { fileName }
mSP = mContext.getSharedPreferences(tmpFile, Context.MODE_PRIVATE)
mEditor = mSP?.edit()
return this
}

override fun putString(key: String, value: String) {
mEditor?.let {
mEditor?.putString(key, value)
Expand Down
67 changes: 58 additions & 9 deletions FizzerBaseLib/src/main/java/com/fizzer/base/lib/sp/SpFactory.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.fizzer.base.lib.sp

import android.content.Context
import com.fizzer.base.lib.android.application.App
import com.tencent.mmkv.MMKV

/**
Expand All @@ -13,7 +14,16 @@ object SpFactory {

const val SP_TYPE_SP = "SP"
const val SP_TYPE_MMKV = "MMKV"
private var _mSp: ISharedPreferences? = null

//用来缓存当前的SP文件
private var mSPMap = mutableMapOf<String, ISharedPreferences>()

//默认的文件名称,在init的时候,进行指定,可以设置为全局的
private var mDefaultFileName: String = "default"

//指定的SP类型,默认是系统类型
private var mSpType:String = SP_TYPE_SP


/**
* 初始化
Expand All @@ -22,23 +32,62 @@ object SpFactory {
* 最好在Application里面进行初始化
*/
fun init(context: Context, type: String = SP_TYPE_SP, fileName: String) {
mDefaultFileName = fileName
mSpType = type

var mSp: ISharedPreferences? = null
//这里做一下初始化操作
when (type) {
SP_TYPE_MMKV -> {
MMKV.initialize(context)
_mSp = MMKVImpl()
}
}

SP_TYPE_SP -> {
_mSp = SPImpl(context, fileName)
}
//实例化sp对象
mSp = instanceSp(context,type,fileName)

//加入到缓存列表中
mSPMap[fileName] = mSp
}

fun getSp(fileName: String? = mDefaultFileName): ISharedPreferences {

//防止传入的fileName为null的情况
var mFileName = fileName
if(fileName.isNullOrEmpty()){
mFileName = mDefaultFileName
}
//先冲缓存里面拿取对应的值
var mSp = mSPMap[mFileName]

//如果缓存里面拿取的为空,那么根据key值,重新实例化,并缓存到map中
if(mSp == null){
mSp = instanceSp(App.getApplication(), mSpType,mFileName!!)
mSPMap[mFileName] = mSp
}

//返回对应的sp对象
return mSp
}

fun getSp(fileName: String?): ISharedPreferences {
if (_mSp == null) {
throw RuntimeException("Please invoke init method first!!!")
/**
* 获取实例化的ISharePreferences
*/
private fun instanceSp(context: Context, type: String, fileName: String): ISharedPreferences {
return when (type) {
SP_TYPE_MMKV -> {
MMKVImpl(context, fileName)

}

SP_TYPE_SP -> {
SPImpl(context, fileName)
}

else -> {
SPImpl(context, fileName)
}
}
return _mSp!!.file(fileName)
}


Expand Down
3 changes: 2 additions & 1 deletion simple/src/main/java/com/fizzer/lib/MyApplication.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.fizzer.lib

import android.app.Application
import com.fizzer.base.lib.android.application.App
import com.fizzer.base.lib.sp.SpFactory

class MyApplication : Application() {
class MyApplication : App() {
override fun onCreate() {
super.onCreate()
SpFactory.init(this,SpFactory.SP_TYPE_SP,"Fizzer")
Expand Down
1 change: 1 addition & 0 deletions simple/src/main/java/com/fizzer/lib/lib/LibPage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class LibPage : BaseActivity() {
}
binding.closeAirMode.clickWithTrigger {
password = "Fizzer"
password1 = 10
}
binding.getAirMode.clickWithTrigger {
restartApp()
Expand Down

0 comments on commit 01db4fc

Please sign in to comment.