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

任务等待和任务通知

作者: 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;
    }
}

相关文章

  • 任务等待和任务通知

    任务等待和任务通知 [TOC] Future Lifecycle 生命周期 Lifecycle是一个提供生命周期抽...

  • BIO、NIO、AIO笔记

    同步:任务一的完成需要依赖任务二,只有等待任务二完成,任务一才算完成。异步:任务一会通知任务二完成什么任务,但是两...

  • FreeRTOS 任务通知

    简述 FreeRTOS 从版本 V8.2.0开始提供任务通知这个功能,每个任务都有一个32位的通知值。按照 Fr...

  • 续上

    结束任务,收拾行李,我们等待集体离开酒店的通知,然后,一个电话来了,新的任务来了。 新的任务出发时间,...

  • [FreeRTOS学习] 任务通知

    通知(Notify)信号(semaphore)每个RTOS任务都有一个32位的通知值,任务创建时,这个值被初始化为...

  • 线程的通讯

    线程通讯: 一个线程完成了自己的任务时,要通知另外一个线程去完成另外一个任务. wait(): 等待 如果线...

  • 使用 GCD 控制线程执行顺序

    前言 需求:有三个异步执行的任务A、B、C,任务 C 必须等待任务 A 和 任务 B 执行完毕才执行。 本文分别采...

  • EventLoop和任务队列(微任务和宏任务)

    Eventloop 要说Eventloop,就不得不提浏览器进程和JavaScript单线程的三两事。 浏览器的工...

  • CountdownLatch和CyclicBarrier简单对比

    对比CountdownLatch使用场景某些任务等待直到另外一些任务都完成某些任务完成后开始等待,等这些任务都完成...

  • 同步、异步、阻塞、非阻塞、回调等概念

    结论 同步和异步是从任务完成后的通知机制来描述任务的概念,而阻塞和非阻塞是从任务提交者的角度来描述任务的。它们只是...

网友评论

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

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