【发布时间】:2019-03-12 05:23:56
【问题描述】:
首先,我不了解 Android 和 Java 的所有内容,我正在研究这方面的内容,以防您发现我的问题缺乏相关知识。
当我读到 Loaders 的好处时,我读到加载器在单独的线程上运行以防止 UI 无响应。
出现并阅读ViewModel和LiveData和房间后以及阅读this post后,尤其是在部分 观察数据说
在
Loader的世界中,将数据传输到 UI 将涉及LoaderManager,在正确的地方调用initLoader(),并构建一个> ?LoaderCallbacks。世界变得更简单 架构组件世界。等等。
下一节
加载第二段中所说的所有内容
例如,Room 允许您进行可观察的查询 — 数据库查询 返回
LiveData以便数据库更改自动向上传播 通过您的ViewModel到您的用户界面。有点像CursorLoader没有 触摸光标或加载器。
以上所有都意味着 ViewModel 和 LiveData 与 Room 可以在后台线程中工作,我意思是当我们使用 ViewModel 和 LiveData 和 Room 而不是 Loaders 时,我们不需要使用 AsyncTask 或 AsyncTaskLoader 或 Executer
但在这些例子中:
android-room-with-a-view,正如他们在 README.md 中所说,可以用作模板,
在MainActivity.java中他们写了mWordViewModel.getAllWords().observe(this, .... ;,如果我们深入追踪getAllWords()我们会发现该函数是select的查询,但是当他们想要在 WordRepository.java 中插入数据
或 WordRoomDatabase.java 他们使用 AsyncTask,
我的意思是为什么他们使用 ViewModel 和 LiveData 和 Dao 来查询 select,并且在insert 的查询,他们 included AsyncTask 与 ViewModel 和 Dao?,因为作为上面的 ViewModel 和带有 Room 的 LiveData 意味着什么可以在后台线程中工作?
我之前的问题是针对此示例 android-persistence at step3_solution,我的意思是 获取 仅使用 ViewModel 的数据,但要插入 数据,例如在DatabaseInitializer.java 中,AsyncTask 是否被包含?
同样在BasicSample 的这个示例中,当必须插入数据时,Executer 是否包含?
非常感谢
【问题讨论】:
-
在协程中使用 Kotlin
标签: java android android-room android-livedata android-viewmodel