我需要在存储库中初始化Room,但要做到这一点,我需要上下文。如果我通过视图模型传递上下文,我会得到以下消息This field leaks a context object
。
我已经检查了this的答案,但是他们在视图层中初始化了存储库对象,但是根据干净的体系结构,视图层不应该知道任何关于数据层的信息,对吗?那么如何组织context
到数据层的交付,而不使用DI呢?
class MainViewModel(private val context: Context) : ViewModel() {
private val roomManager : RoomManager = RoomManagerImpl(context)
private fun addItem(){
roomManager.addItem()
}
}
以下是存储库代码
class RoomManagerImpl(private val context: Context) : RoomManager {
private val db = Room.databaseBuilder(
context,
AppDatabase::class.java, "database-name"
)
2条答案
按热度按时间elcex8rz1#
将Activity Context传递给Activity的ViewModel并不是一个好的做法,它会导致内存泄漏。
您可以通过扩展以下代码中的AndroidViewModel类检查来获取ViewModel中的上下文。
它将为您提供应用程序级别的上下文。
8ehkhllq2#
我是这样说的,我希望它能帮助你,否则你可以使用AndroidViewModel而不是Viewmodal