猿问

如何将 MVVM 与 asyncTask 或任何其他东西一起使用?

我想使用 AsyncTaskLoader 但它已被弃用所以我知道我可以使用 ViewModel 和实时数据或可变数据代替 AsyncTaskLoader 但我不知道如何将它们与异步任务一起使用。


扬帆大鱼
浏览 154回答 3
3回答

慕村9548890

首先,我建议使用 JobScheduler/WorkManager 正如 Google在此处声明的那样。但是,如果您仍然对使用 感兴趣AsyncTask/AsyncTaskLoader,这样的事情可能会有所帮助。由于ViewModel持有对 a 的引用LiveData并ViewModel更新View (Activity or Fragment),您可以进行后台网络调用(使用 AsyncTaskLoader)并在调用时更新 liveData&nbsp;onLoadFinished。LiveData 的这个更新应该触发 observable 并最终触发 View (&nbsp;Activity/Fragment)注意:确保您从 API 调用(例如:)返回的数据<POJO.class>类型为MutableLiveData/&nbsp;LiveData。

蝴蝶不菲

将 AsyncTask 与 ViewModel 一起使用违背了使用 ViewModel 的目的。ViewModel基本用例是:public class MyViewModel extends ViewModel {&nbsp; &nbsp; private MutableLiveData<List<User>> users;&nbsp; &nbsp; public LiveData<List<User>> getUsers() {&nbsp; &nbsp; &nbsp; &nbsp; if (users == null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; users = new MutableLiveData<List<User>>();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; loadUsers();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return users;&nbsp; &nbsp; }&nbsp; &nbsp; private void loadUsers() {&nbsp; &nbsp; &nbsp; &nbsp; // Do an asynchronous operation to fetch users.&nbsp; &nbsp; }}在loadUsers你应该做的工作 - 在后台线程中。您可以在这里使用 AsyncTask ,但这没有意义,因为您不会从它的doInBackground()和onPostExecute()方法中受益。
随时随地看视频慕课网APP

相关分类

Java
我要回答