为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

扬帆大鱼 2021-10-17 15:47:46
我想使用 AsyncTaskLoader 但它已被弃用所以我知道我可以使用 ViewModel 和实时数据或可变数据代替 AsyncTaskLoader 但我不知道如何将它们与异步任务一起使用。
查看完整描述

3 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

首先,我建议使用 JobScheduler/WorkManager 正如 Google在此处声明的那样。

但是,如果您仍然对使用 感兴趣AsyncTask/AsyncTaskLoader,这样的事情可能会有所帮助。由于ViewModel持有对 a 的引用LiveDataViewModel更新View (Activity or Fragment),您可以进行后台网络调用(使用 AsyncTaskLoader)并在调用时更新 liveData onLoadFinished。LiveData 的这个更新应该触发 observable 并最终触发 View ( Activity/Fragment)

注意:确保您从 API 调用(例如:)返回的数据<POJO.class>类型为MutableLiveDataLiveData


查看完整回答
反对 回复 2021-10-17
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

将 AsyncTask 与 ViewModel 一起使用违背了使用 ViewModel 的目的。


ViewModel基本用例是:


public class MyViewModel extends ViewModel {

    private MutableLiveData<List<User>> users;

    public LiveData<List<User>> getUsers() {

        if (users == null) {

            users = new MutableLiveData<List<User>>();

            loadUsers();

        }

        return users;

    }


    private void loadUsers() {

        // Do an asynchronous operation to fetch users.

    }

}

在loadUsers你应该做的工作 - 在后台线程中。您可以在这里使用 AsyncTask ,但这没有意义,因为您不会从它的doInBackground()和onPostExecute()方法中受益。


查看完整回答
反对 回复 2021-10-17
  • 3 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信