64 lines
1.6 KiB
Kotlin
64 lines
1.6 KiB
Kotlin
|
|
package com.gamedog.vididin.manager
|
||
|
|
|
||
|
|
import com.ama.core.architecture.util.FileUtil
|
||
|
|
import com.gamedog.vididin.main.fragments.task.TaskBean
|
||
|
|
import com.google.gson.GsonBuilder
|
||
|
|
import kotlinx.coroutines.sync.Mutex
|
||
|
|
import kotlinx.coroutines.sync.withLock
|
||
|
|
import kotlinx.coroutines.*
|
||
|
|
|
||
|
|
class TaskManager private constructor() {
|
||
|
|
companion object {
|
||
|
|
@Volatile
|
||
|
|
private var instance: TaskManager? = null
|
||
|
|
|
||
|
|
fun instance(): TaskManager {
|
||
|
|
return instance ?: synchronized(this) {
|
||
|
|
instance ?: TaskManager().also {
|
||
|
|
instance = it
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private val mutex = Mutex()
|
||
|
|
|
||
|
|
@Volatile
|
||
|
|
private var initialized = false
|
||
|
|
private var mTaskConfigBean: TaskBean? = null
|
||
|
|
private val mGson = GsonBuilder().create()
|
||
|
|
|
||
|
|
|
||
|
|
init {
|
||
|
|
loadTaskConfigAsync()
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
suspend fun getTaskConfig(): TaskBean? = mutex.withLock {
|
||
|
|
if (!initialized) {
|
||
|
|
loadTaskConfigFromAsset()
|
||
|
|
}
|
||
|
|
return mTaskConfigBean
|
||
|
|
}
|
||
|
|
|
||
|
|
private fun loadTaskConfigAsync() {
|
||
|
|
CoroutineScope(Dispatchers.IO).launch {
|
||
|
|
mutex.withLock {
|
||
|
|
if (!initialized) {
|
||
|
|
loadTaskConfigFromAsset()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private suspend fun loadTaskConfigFromAsset() {
|
||
|
|
return withContext(Dispatchers.IO) {
|
||
|
|
val configStr = FileUtil.readAssetsFile("taskConfig.json")
|
||
|
|
mTaskConfigBean = mGson.fromJson(configStr, TaskBean::class.java)
|
||
|
|
initialized = true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|