Skip to content

有向无环图实现启动器优化

Peakmain edited this page Sep 14, 2021 · 1 revision

使用

原理

原理图.png

有向无环图的设计 image.png

使用

  • 1、并发运行,只需要继承Task
public class UtilsTask extends Task {
    @Override
    public void run() {
        //处理数据
    }
}
  • 2、在某个Task之后执行,比如极光需要在获取设备id之后执行 如:获取设备id的Task
public class DeviceIdTask extends Task {
    private String mDeviceId;

    @Override
    public void run() {
        // 真正自己的代码
        TelephonyManager tManager = (TelephonyManager) mContext.getSystemService(
                Context.TELEPHONY_SERVICE);
        mDeviceId = tManager.getDeviceId();
        App app = (App) mContext;
        app.setDeviceId(mDeviceId);
    }
}

极光的Task需要实现dependsOn方法 如下代码

public class JPushTask extends Task {
    @Override
    public List<Class<? extends Task>> dependsOn() {
        List<Class<? extends Task>> tasks = new ArrayList<>();
        tasks.add(DeviceIdTask.class);
        return tasks;
    }

    @Override
    public void run() {
        //模拟极光推送
        LogUtils.e("极光推送开始");
        App app = (App) mContext;
        LogUtils.e("极光推送获取id:",app.getDeviceId());
    }
}
  • 3、运行在主线程只需要继承MainTask即可
public class WeexTask extends MainTask {
    @Override
    public void run() {
        InitConfig config = new InitConfig.Builder().build();
        WXSDKEngine.initialize((Application) mContext, config);
    }
}
  • 4、想空闲的时候处理数据,只需要在Application中使用DelayInitDispatcher添加相关Task
    DelayInitDispatcher delayInitDispatcher=new DelayInitDispatcher();
    delayInitDispatcher.addTask(任务即可).start();
  • 5、最后只需要在Application中进行初始化和添加运行就可以了
  TaskDispatcher.init(this);
        TaskDispatcher dispatcher = TaskDispatcher.createInstance();
        dispatcher.addTask(new AMapTask())
                .addTask(new UtilsTask())
                .addTask(new JPushTask())
                .addTask(new DeviceIdTask())
                .addTask(new WeexTask())
                .start();