美文网首页基础知识学习
任务等待和任务通知

任务等待和任务通知

作者: jxcyly1985 | 来源:发表于2020-08-29 20:32 被阅读0次

    任务等待和任务通知

    [TOC]

    Future

    Lifecycle

    生命周期

    Lifecycle是一个提供生命周期抽象的类,提供了生命周期的观察

    LifecycleOwner

    生命周期的所有者

    现在androidX库对Activity,Fragment都已经默认实现了LifecycleOwner接口

    LiveData

    实时数据

    LiveData 是androidx.lifecycle是一个持有数据对象的类,具有以下特点

    • 在满足要求的生命周期内,对数据进行观察
    • 支持粘性处理,添加观察者时,已有数据的情况下立即异步返回数据
    • 历史数据覆盖,UI线程处理不及时,当历史数据刷新频繁,会用最新的数据覆盖历史数据
    livedata.png livedata-think.png

    实现

    可以使用生命周期管理的异步通知和同步通知

    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;
        }
    }
    
    

    相关文章

      网友评论

        本文标题:任务等待和任务通知

        本文链接:https://www.haomeiwen.com/subject/vpbjsktx.html