异步任务工具

组件说明

按组执行的异步任务

导入依赖

Step 1. 添加JitPack仓库到根目录build.gradle文件

allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}

Step 2. 在module添加依赖

dependencies {
	        implementation 'com.github.Doonkey:AsyncTool:2.0'
	}

功能描述

组与组串行,组内遵循以下规则:

1>.继承SubThreadTask实现组内并行,如(task7, task8, task9)

2>.继承NormalThreadTask实现组内串行,task1 -> task2 -> task3

3>.在group之前的任务,与group不分先后,谁先来就先执行;在group之后的任务,则先执行完了该group之后才会执行

此例中执行顺序 task1 -> task2 ->task3 -> task4 -> task5 -> task6 -> (task7, task8, task9);

则可以在后面执行的组中的任务里获取前面执行组中的任务TaskSubCallback.onResponse()结果,

如在absTask5可以获取task1,task2,task3,task4,但不能获取task6,task7,task8,task9

注意TaskSubCallback.onFinish()表示当前组已经执行完毕并可能已经进入到下一个组任务;

使用

    private void asyncTool(){
        AbsTask task4 = new SyncTask4("task4", subCallback);
        AbsTask task5 = new SyncTask5("task5", subCallback);
        AbsTask task6 = new SyncTask6("task6", subCallback);

        AbsTask task1 = new SyncTask1("task1", subCallback);
        AbsTask task2 = new SyncTask2("task2", task5, subCallback);
        AbsTask task3 = new SyncTask3("task3", subCallback);

        AbsTask task7 = new AsyncTask7("task7", subCallback);
        AbsTask task8 = new AsyncTask8("task8", subCallback);
        AbsTask task9 = new AsyncTask9("task9", subCallback);
        AsyncTool.get().addTaskGroup(task1, task2, task3)
                .addTaskGroup(task4, task5, task6)
                .addTaskGroup(task7, task8, task9)
                .start(new TaskCallback() {
                    @Override
                    public void onFinish(String taskName) {
                        System.out.println("AsyncTask=>任务全部完成" + taskName);
                    }
                });
    }
串行实现:继承SyncTaskAbs
public class SyncTask1 extends SyncTaskAbs<String> {

    public SyncTask1(String taskName, TaskSubCallback<String> callback) {
        super(taskName, callback);
    }

    @Override
    public void startTask(CountDownLatch countDownLatch) {
        SystemClock.sleep(2000);
        String response = "AsyncTask=>"+getTaskName();
        super.startTask(countDownLatch, response);
    }
}
并行实现:继承AsyncTaskAbs
public class AsyncTask7 extends AsyncTaskAbs<String> {

    public AsyncTask7(String taskName, TaskSubCallback<String> callback) {
        super(taskName, callback);
    }

    @Override
    public void startTask(CountDownLatch countDownLatch) {
        SystemClock.sleep(2000);
        String response = "AsyncTask=>"+getTaskName();
        super.startTask(countDownLatch, response);
    }
}
任务结果传递见SyncTask2与SyncTask5代码实现
public class SyncTask2 extends SyncTaskAbs<String> {

    public SyncTask2(String taskName, AbsTask dispatchTask, TaskSubCallback<String> callback) {
        super(taskName, dispatchTask, callback);
    }

    @Override
    public void startTask(CountDownLatch countDownLatch) {
        SystemClock.sleep(2000);
        String response = "AsyncTask=>"+getTaskName();
        super.startTask(countDownLatch, response);
    }
}
public class SyncTask5 extends SyncTaskAbs<String> {

    private String task7Response;

    public SyncTask5(String taskName, TaskSubCallback<String> callback) {
        super(taskName, callback);
    }

    @Override
    public <T> void collectData(T response) {
        task7Response = ",从已完成任务获取到的数据=》" + (String) response;
    }

    @Override
    public void startTask(CountDownLatch countDownLatch) {
        SystemClock.sleep(2000);
        String response = "AsyncTask=>"+getTaskName() + task7Response;
        super.startTask(countDownLatch, response);
    }
}

在SyncTask2中传递需要结果的SyncTask5的实例,然后在SyncTask5实现collectData(T response)方法,强转为SyncTask2结果的类型使用。

重要的事情说3遍:

在startTask(CountDownLatch countDownLatch)函数中完成任务都需手动调用super.startTask(countDownLatch, response);

在startTask(CountDownLatch countDownLatch)函数中完成任务都需手动调用super.startTask(countDownLatch, response);

在startTask(CountDownLatch countDownLatch)函数中完成任务都需手动调用super.startTask(countDownLatch, response);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值