kotlin写一个缓存单例,提供给两个activity之间共享数据
时间: 2024-10-08 14:08:42 浏览: 35
在Kotlin中,你可以使用`Lazy Initialization`结合`ViewModel`来创建一个线程安全的、跨Activity的数据缓存单例。`ViewModel`是Android Architecture Components中的一个核心组件,用于存储和管理UI相关的数据,它会在整个应用生命周期内保持存在,并且可以在多个视图中复用。
下面是一个简单的例子:
```kotlin
import android.content.Context
import androidx.lifecycle.ViewModelProvider
import java.util.concurrent.ConcurrentHashMap
class MyCacheViewModel : ViewModel() {
private val cache = ConcurrentHashMap<String, Any>()
fun put(key: String, value: Any) {
cache[key] = value
}
fun get(key: String): Any? {
return cache.get(key)
}
}
fun <T> CacheSingleton(context: Context): T {
@Suppress("unchecked_cast")
return ViewModelProvider(context)[MyCacheViewModel::class.java] as T
}
// 使用示例
val sharedCache = CacheSingleton<YourSharedCacheClass>(requireContext())
sharedCache.put("yourKey", yourData)
// 在另一个Activity中获取并使用数据
val data = sharedCache.get("yourKey")
```
在这个例子中,`MyCacheViewModel`是单例模式下的缓存容器,通过`ViewModelProvider`保证其在整个应用生命周期内只有一个实例。`put`和`get`方法用于添加和检索数据。
注意,你需要替换`YourSharedCacheClass`和`yourData`为实际需要的数据类型和值。
阅读全文