Skip to content

Commit eb0c931

Browse files
committed
feature: optimize performance
1 parent e80e02f commit eb0c931

File tree

3 files changed

+24
-18
lines changed

3 files changed

+24
-18
lines changed

compiler/src/main/kotlin/io/github/sgpublic/exsp/core/PreferenceCompiler.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ object PreferenceCompiler {
136136
.addModifiers(Modifier.PUBLIC)
137137
.addAnnotation(Override::class.java)
138138
.addParameter(type, "value")
139-
.addStatement("SharedPreferences.Editor editor = SharedPreferenceReference.get().edit()")
139+
.addStatement("SharedPreferences.Editor editor = SharedPreferenceReference.edit()")
140140

141141

142142
var convertedType = type
@@ -197,7 +197,6 @@ object PreferenceCompiler {
197197
ExPreferenceProcessor.ExConverters, type)
198198
}
199199
setter.addStatement("editor.apply()")
200-
.addStatement("SharedPreferenceReference.clear()")
201200

202201
impl.addMethod(getter.build())
203202
impl.addMethod(setter.build())

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
44
android.useAndroidX=true
55
android.nonTransitiveRClass=true
66

7-
exsp.version=1.0.0-alpha06
7+
exsp.version=1.0.0-alpha07

runtime/src/main/java/io/github/sgpublic/exsp/ExPreference.kt

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,29 +15,36 @@ object ExPreference {
1515

1616
@JvmStatic
1717
fun getSharedPreference(name: String, mode: Int): Reference {
18-
return Reference(context?.get()!!, name, mode)
18+
return Reference(requiredContext(), name, mode)
1919
}
2020

21-
class Reference(
21+
private fun requiredContext() =
22+
context?.get() ?: throw IllegalStateException("Context are not initialized, did you call ExPreference.init(context)?")
23+
24+
class Reference internal constructor(
2225
private val context: Context,
2326
private val name: String,
2427
private val mode: Int,
2528
) {
26-
private var SharedPreferences: SharedPreferences? = null
29+
private var sp: SharedPreferences? = null
2730
fun get(): SharedPreferences {
28-
synchronized(this) {
29-
if (SharedPreferences == null) {
30-
SharedPreferences = context.getSharedPreferences(name, mode)
31-
}
32-
return SharedPreferences!!
31+
sp?.let { return it }
32+
context.getSharedPreferences(name, mode).let {
33+
sp = it
34+
it.registerOnSharedPreferenceChangeListener(object :
35+
SharedPreferences.OnSharedPreferenceChangeListener {
36+
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
37+
it.unregisterOnSharedPreferenceChangeListener(this)
38+
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
39+
sp = sharedPreferences
40+
}
41+
})
42+
return it
3343
}
3444
}
35-
fun clear() {
36-
synchronized(this) {
37-
if (SharedPreferences != null) {
38-
SharedPreferences = null
39-
}
40-
}
45+
46+
fun edit(): SharedPreferences.Editor {
47+
return get().edit()
4148
}
4249
}
4350

@@ -54,5 +61,5 @@ object ExPreference {
5461
}
5562

5663
operator fun ExPreference.Reference.getValue(thisRef: Any?, property: KProperty<*>): SharedPreferences {
57-
return this.get()
64+
return get()
5865
}

0 commit comments

Comments
 (0)