3 回答
TA贡献1884条经验 获得超4个赞
首先,我建议使用 JobScheduler/WorkManager 正如 Google在此处声明的那样。
但是,如果您仍然对使用 感兴趣AsyncTask/AsyncTaskLoader
,这样的事情可能会有所帮助。由于ViewModel
持有对 a 的引用LiveData
并ViewModel
更新View (Activity or Fragment)
,您可以进行后台网络调用(使用 AsyncTaskLoader)并在调用时更新 liveData onLoadFinished
。LiveData 的这个更新应该触发 observable 并最终触发 View ( Activity/Fragment
)
注意:确保您从 API 调用(例如:)返回的数据<POJO.class>
类型为MutableLiveData
/ LiveData
。
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()方法中受益。
添加回答
举报