首页 > 解决方案 > 为什么我们在 Android 的构造函数中使用应用程序上下文?

问题描述

在使用 Room Database 时,我发现 Repository 和 ViewModel 等类在其构造函数中使用应用程序上下文作为参数。

我只想知道原因,为什么这样做?使用应用程序上下文是一种强制吗?

public WordViewModel (Application application) {
   super(application);
   mRepository = new WordRepository(application);
   mAllWords = mRepository.getAllWords();
}

 WordRepository(Application application) {
   WordRoomDatabase db = WordRoomDatabase.getDatabase(application);
   mWordDao = db.wordDao();
   mAllWords = mWordDao.getAllWords();

}

想知道这些东西背后的原因

标签: androidandroid-room

解决方案


  1. 为什么我们不能使用活动上下文?

注意:ViewModel 绝不能引用视图、生命周期或任何可能持有对活动上下文的引用的类。

ViewModel 对象旨在比视图或 LifecycleOwners 的特定实例更长寿。这种设计还意味着您可以更轻松地编写测试来覆盖 ViewModel,因为它不了解视图和生命周期对象。

  1. 为什么我们可以使用应用程序上下文?

如果 ViewModel 需要 Application 上下文,例如查找系统服务,它可以扩展 AndroidViewModel 类,并在构造函数中有一个接收 Application 的构造函数,因为 Application 类扩展了 Context。

查看视图模型


推荐阅读