60 lines
1.7 KiB
Kotlin
60 lines
1.7 KiB
Kotlin
package com.mogo.map
|
||
|
||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP
|
||
import java.util.concurrent.ConcurrentHashMap
|
||
|
||
class MogoMap private constructor() {
|
||
|
||
companion object {
|
||
private const val TAG = "MogoMap"
|
||
|
||
const val DEFAULT = "Default"
|
||
|
||
@JvmStatic
|
||
val mapInstance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
|
||
MogoMap()
|
||
}
|
||
}
|
||
|
||
private val mapCache = ConcurrentHashMap<String, IMogoMap>()
|
||
|
||
/**
|
||
* 缓存多实例对象,instanceTag未指定默认给予DEFAULT
|
||
*/
|
||
fun initInstance(map: IMogoMap, instanceTag: String = DEFAULT) {
|
||
if (mapCache.contains(instanceTag)) {
|
||
CallerLogger.e(
|
||
"$M_MAP$TAG",
|
||
" already has map instance with tag :$instanceTag , please check"
|
||
)
|
||
return
|
||
}
|
||
mapCache[instanceTag] = map
|
||
}
|
||
|
||
/**
|
||
* 业务使用时根据地图是否加载来判定 是否获取IMogoMap实例
|
||
*/
|
||
fun getMogoMap(instance: String = DEFAULT): IMogoMap? {
|
||
return if (mapCache[instance] == null) {
|
||
CallerLogger.e("$M_MAP$TAG", "getMogoMap func has error with no instance in mapCache")
|
||
mapCache[DEFAULT]
|
||
} else {
|
||
mapCache[instance]
|
||
}
|
||
}
|
||
|
||
fun clear(instance: String = DEFAULT) {
|
||
if (mapCache.containsKey(instance)) {
|
||
mapCache[instance]?.uiController?.destroy()
|
||
mapCache.remove(instance)
|
||
} else {
|
||
CallerLogger.e(
|
||
"$M_MAP$TAG",
|
||
"Map instance invoke destroy in clear func has no instance key"
|
||
)
|
||
}
|
||
}
|
||
|
||
} |