Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我们在Android的构造函数中使用应用程序上下文?_Android_Android Room - Fatal编程技术网

为什么我们在Android的构造函数中使用应用程序上下文?

为什么我们在Android的构造函数中使用应用程序上下文?,android,android-room,Android,Android Room,在使用Room数据库时,我发现像Repository和ViewModel这样的类在其构造函数中使用应用程序上下文作为参数 我只是想知道原因,为什么会这样? 使用应用程序上下文是一种强迫吗 public WordViewModel (Application application) { super(application); mRepository = new WordRepository(application); mAllWords = mRepository.getAllW

在使用Room数据库时,我发现像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();
}

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

  • 为什么我们不能使用活动上下文
  • 警告:ViewModel决不能引用视图、生命周期或任何可能包含对活动上下文引用的类

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

  • 为什么我们可以使用应用程序上下文
  • 如果ViewModel需要应用程序上下文,例如查找系统服务,则它可以扩展AndroidViewModel类,并在构造函数中具有接收应用程序的构造函数,因为应用程序类扩展了上下文


    请看

    让我给你一个懒散的答案来回答这个问题。应用程序上下文生命周期与应用程序的生命周期相关联,而活动上下文与该活动的生命周期相关联。确保使用正确的上下文来防止内存泄漏。希望这有助于

    您对库的内部工作方式感兴趣。那很好。也就是说,在提出这个问题之前,您是否已经在源代码中查找了文档?(编辑:你可以按住alt键并点击Android Studio中的一个函数来导航到源代码)如果问题是好的,为什么它是向下的???