任务等待和任务通知
[TOC]
Future
Lifecycle
生命周期
Lifecycle是一个提供生命周期抽象的类,提供了生命周期的观察
LifecycleOwner
生命周期的所有者
现在androidX库对Activity,Fragment都已经默认实现了LifecycleOwner接口
LiveData
实时数据
LiveData 是androidx.lifecycle
是一个持有数据对象的类,具有以下特点
- 在满足要求的生命周期内,对数据进行观察
- 支持粘性处理,添加观察者时,已有数据的情况下立即异步返回数据
- 历史数据覆盖,UI线程处理不及时,当历史数据刷新频繁,会用最新的数据覆盖历史数据
实现
可以使用生命周期管理的异步通知和同步通知
package com.example.apidemo.arch;
import android.os.Looper;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class FutureLiveData<T> extends FutureTask<T> {
MutableLiveData<T> mLiveData = new MutableLiveData<>();
public FutureLiveData(Callable callable) {
super(new Callable<T>() {
@Override
public T call() throws Exception {
throw new RuntimeException("FutureLiveData not implement Callable");
}
});
}
public void observer(LifecycleOwner lifecycleOwner, Observer<T> observer) {
mLiveData.observe(lifecycleOwner, observer);
}
public void observerForever(Observer<T> observer) {
mLiveData.observeForever(observer);
}
public void setValue(T t) {
assert Looper.myLooper() == Looper.getMainLooper();
set(t);
mLiveData.setValue(t);
}
public void postValue(T t) {
set(t);
mLiveData.postValue(t);
}
public T getValue() {
try {
return get();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
网友评论