基础知识学习

任务等待和任务通知

2020-08-29  本文已影响0人  jxcyly1985

任务等待和任务通知

[TOC]

Future

Lifecycle

生命周期

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

LifecycleOwner

生命周期的所有者

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

LiveData

实时数据

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

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

上一篇 下一篇

猜你喜欢

热点阅读