美文网首页
Android 简单任务链LinkTask

Android 简单任务链LinkTask

作者: 懒人改变世界_ | 来源:发表于2019-04-07 17:10 被阅读0次

在Android开发时,我们经常会有这样的业务需求,需要多个任务串联起来,做完一个在进行下一个。如果我们直接通过一般办法去写的话,代码会很乱,写起来也会很麻烦。

那么由此LinkTask就诞生了,它能把多个任务串联起来,按顺序执行。并且能把上一个任务执行完成得到的结果传给下一个任务,调用next.next("传给下一个任务的参数"); 开始执行下一个任务。
使用代码如下:

LinkTask linkTask = new LinkTask();
        linkTask.start(new LinkTask.Task() {
            @Override
            public void task(final LinkTask.Next next, final Object obj) {
                //同步任务
                Log.i("LinkTask", "任务一开始");
                List<Integer> list=new ArrayList<>();
                for (int i = 0; i <100 ; i++) {
                    list.add(i);
                }
                Log.i("LinkTask", "任务一做完了");
                next.next(list.size());
            }
        }).next(new LinkTask.Task() {
            @Override
            public void task(final LinkTask.Next next, final Object obj) {
                //异步任务
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Log.i("LinkTask", "任务二开始,参数:" + obj.toString());
                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        Log.i("LinkTask", "任务二做完了");
                        next.next("22222");
                    }
                }).start();
            }
        });

LinkTask库也很简单就一个类,如下:

package android.com.linktasklib;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import java.util.LinkedList;
import java.util.Queue;

/**
 * ================================================
 * 作    者:轻风
 * 版    本:1.0
 * 创建日期:2017/8/24 11:34
 * 描    述:任务链(完成一个任务,再一下一个任务)
 * 优点:解决迷之缩进问题,让一套逻辑看起来更清晰
 * Q    Q:2319118797
 * ================================================
 */
public class LinkTask {

    //队列保存每一个任务
    Queue<Task> queue=new LinkedList<>();

    //handler用来回到主线程
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Task task=queue.poll();
            if(task!=null){
                task.task(new Next() {
                    @Override
                    public void next(Object obj) {
                        Message msg=new Message();
                        msg.obj=obj;
                        handler.sendMessage(msg);
                    }
                },msg.obj);
            }else {
                Log.i("LinkTask","所有任务结束了");
            }
        }
    };

    /**
     * 任务开始
     * @param task
     * @return
     */
    public LinkTask start(Task task){
        task.task(new Next() {
            @Override
            public void next(Object obj) {
                Message msg=new Message();
                msg.obj=obj;
                handler.sendMessage(msg);
            }
        },"");
        return this;
    }

    /**
     * 下一个任务
     * @param task
     * @return
     */
    public LinkTask next(Task task){
        queue.offer(task);
        return this;
    }

    public interface Task {
        /**
         * 里边执行一个任务
         * @param next 下一个任务的引用
         * @param obj 上一个任务的结果
         */
        void task(Next next, Object obj);
    }

    public interface Next {
        /**
         * 开始一下一个任务
         * @param obj 下一个任务所需参数
         */
        void next(Object obj);
    }
}

希望能对大家有所帮助。

相关文章

网友评论

      本文标题:Android 简单任务链LinkTask

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