美文网首页
线程切换小工具类

线程切换小工具类

作者: 一航jason | 来源:发表于2024-07-21 15:21 被阅读0次

package com.github.jasonhancn.tvcursor.util;

import android.os.Handler;
import android.os.Looper;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;

public class RunsUtils {

    private final List<Bean> runnableArrayList = new ArrayList<>();
    private final Handler handler = new Handler(Looper.getMainLooper());
    private Object result;
    private WeakReference<OnRunning> mCallback;
    private int currentIndex;

    public RunsUtils(Object result) {
        this.result = result;
    }

    public RunsUtils runMainTread(OnRunning runnable) {
        runnableArrayList.add(new Bean(1, runnable));
        return this;
    }

    public RunsUtils runOtherTread(OnRunning runnable) {
        runnableArrayList.add(new Bean(2, runnable));
        return this;
    }


    public void fire(OnRunning callback) {
        if (this.mCallback == null) {
            this.mCallback = new WeakReference<>(callback);
        }
        if (currentIndex < runnableArrayList.size()) {
            if (runnableArrayList.get(currentIndex).t == 2) {
                new Thread(this::handleCode).start();
            } else {
                handler.post(this::handleCode);
            }
        } else {
            handler.post(() -> {
                if (mCallback.get() != null) mCallback.get().run(result);
                clearAll();
            });
        }
    }

    private void handleCode() {
        if (mCallback == null || mCallback.get() == null) {
            clearAll();
            return;
        }
        result = runnableArrayList.get(currentIndex).runnable.run(result);
        currentIndex++;
        fire(null);
    }

    private void clearAll() {
        for (Bean item : runnableArrayList) {
            item.runnable = null;
        }
        handler.removeCallbacksAndMessages(null);
        runnableArrayList.clear();
        mCallback.clear();
        mCallback = null;
        result = null;
    }

    public static class Bean {
        public int t;
        public OnRunning runnable;

        public Bean(int t, OnRunning runnable) {
            this.t = t;
            this.runnable = runnable;
        }
    }

    public interface OnRunning {
        Object run(Object object);
    }

}


使用:

new RunsUtils("I").runMainTread(new RunsUtils.OnRunning() {
            @Override
            public Object run(Object object) {
                return object + " am";
            }
        }).runOtherTread(new RunsUtils.OnRunning() {
            @Override
            public Object run(Object object) {
                return object + " iron";
            }
        }).runMainTread(new RunsUtils.OnRunning() {
            @Override
            public Object run(Object object) {
                return object + " man";
            }
        }).runOtherTread(new RunsUtils.OnRunning() {
            @Override
            public Object run(Object object) {
                return object + " haha";
            }
        }).fire(new RunsUtils.OnRunning() {
            @Override
            public Object run(Object object) {
                Log.i(TAG, "begin game:" + object);
                return object;
            }
        });

有时候适合自己的才用的舒服

相关文章

  • 因为我对Handler的了解,居然直接给我加了5K?!

    1 Handler是什么? android提供的线程切换工具类。主要的作用是通过handler实现从子线程切换回主...

  • RxJava源码(二)

    使用时: 注意到 一、子线程执行 执行代表线程切换,源码分析 进入ObservableSubscribeOn类,只...

  • 多线程基础——拾遗

    主要内容 线程组的使用 切换线程状态的的方法 SimpleDataFormat类与多线程的解决办法 处理线程异常的...

  • Handler总结

    Handler如何做到切换线程 1.Handler类里包含mLooper和mQueue;2.Looper类包含mQ...

  • Rxjava2 Note

    线程切换 subscribeOn - 切换上游线程,但仅调用的第一次生效 observeOn - 切换下游线程,调...

  • RxJava系列(三)--切换线程

    1.主线程是怎么切换到子线程2.为什么只有第一次切换有效3.子线程是怎么切换到主线程1>问题1,主线程是怎么切换到...

  • 【AE工具】AE一键切换中英文小工具,免费下载 支持CC2014

    【AE工具】AE一键切换中英文小工具,免费下载 支持CC2014-CC2019 01介绍 AE一键切换中英文小工具...

  • Android AsyncTask

    AsyncTask 简介 AsyncTask 实际上是一个帮助类,可以让我们很简单的从子线程切换到主线程,去更新U...

  • AsyncTask解析

    大家都知道,使用AsyncTask类,可以很方便的从子线程切换到UI线程。我们今天从源码来了解一下它的原理。 As...

  • Handler面试问答

    1、 Handler的作用 根据源码中Handler类的注释,Handler有2个作用: (1) 实现线程切换,具...

网友评论

      本文标题:线程切换小工具类

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