我希望使用AsyncTaskLoader,但它已被弃用,因此得知可以使用ViewModel和LiveData或MutableData来替代AsyncTaskLoader,但我不知道如何将它们与异步任务配合使用。
我希望使用AsyncTaskLoader,但它已被弃用,因此得知可以使用ViewModel和LiveData或MutableData来替代AsyncTaskLoader,但我不知道如何将它们与异步任务配合使用。
首先,我建议使用JobScheduler/WorkManager,正如Google在这里所述。
但是,如果您仍然有兴趣使用AsyncTask/AsyncTaskLoader,可以尝试类似以下的方法。由于ViewModel持有对LiveData的引用,而ViewModel更新视图(Activity或Fragment),因此可以使用AsyncTaskLoader进行后台网络调用,并在onLoadFinished被调用时更新liveData。 LiveData的更新应该触发可观察对象并最终更新视图(Activity/Fragment)
注意:确保从API调用获取的数据(例如:<POJO.class>
)的类型为MutableLiveData
/LiveData
。
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()
方法中受益。