Android启动任务调度框架,用于缩短app启动时间

网友投稿 1067 2022-11-01

Android启动任务调度框架,用于缩短app启动时间

Android启动任务调度框架,用于缩短app启动时间

Rocket

Android启动任务调度框架,用于缩短app启动时间

快速开始

STEP0

引入依赖,使用gradle

dependencies { implementation 'cn.hikyson.rocket:rocket-core:VERSION_NAME'}

STEP1

定义某一个任务:

public class TestTask1 extends LaunchTask { @NonNull @Override public String taskName() { //任务名称,默认使用类名 return "test1"; } @Override public void run() throws Throwable { //执行的任务 Thread.sleep(6000); } @NonNull @Override public List dependsOn() { //依赖的其他任务 return Collections.emptyList(); } @NonNull @Override public Executor runOn() { //执行的线程,默认执行在rocket自带的适合大部分app的线程池中 return Execs.io; } @Override public int priority() { //线程优先级,默认Process.THREAD_PRIORITY_BACKGROUND + Process.THREAD_PRIORITY_MORE_FAVORABLE return super.priority() + Process.THREAD_PRIORITY_MORE_FAVORABLE; } @Override public void beforeWait() { //任务分为三个阶段:wait -> run -> done //任务处于等待状态的回调 super.beforeWait(); } @Override public void beforeRun() { //任务分为三个阶段:wait -> run -> done //任务处于运行状态的回调 super.beforeRun(); } @Override public void onTaskDone(TaskRecord taskRecord) { //任务分为三个阶段:wait -> run -> done //任务处于运行完成状态的回调,TaskRecord记录了任务的执行时间等信息 super.onTaskDone(taskRecord); }}

任务的每个接口表示含义见注释。

STEP2

所有API均由Rocket类提供

注册任务有两种方式:

public synchronized Rocket from(Application application, final List conditionTasks)接口直接传入直接定义的任务列表public synchronized Rocket from(Application application, String assetFile),从assets文件中实例化任务列表,具体方式:

在应用assets目录下创建任务列表的xml格式文件,文件根节点为task-list,任务节点名为task,比如在assets下创建rocket文件夹,并在此创建task_list.xml文件,文件内容为:

cn.hikyson.rocket.sample.TestTask1 cn.hikyson.rocket.sample.TestTask2 cn.hikyson.rocket.sample.TestTask3 cn.hikyson.rocket.sample.TestTask4 cn.hikyson.rocket.sample.TestTask5

STEP3

在application中开始Rocket:

Rocket.get().tailTask(new ITailTask() { @Nullable @Override public String taskName() { return TailTask.class.getSimpleName(); } @NonNull @Override public Executor runOn() { return cn.hikyson.rocket.util.Execs.io(); } @Override public void beforeWait() { } @Override public void beforeRun() { } @Override public void onTaskDone(TaskRecord taskRecord) { } }).tasksFinishCallback(new ITasksFinishCallback() { @Override public void onTasksFinished() { L.d("onTasksFinished."); } }) .timeoutHandler(10000, new ITimeoutHandler() { @Override public void onTimeout(List timeoutTasks) { L.d("onTimeout: " + String.valueOf(timeoutTasks)); } }).errorHandler(new IErrorHandler() { @Override public void onError(LaunchTask task, Throwable e) { L.d("onError: " + String.valueOf(task) + ", " + String.valueOf(e)); } }).from(getApplication(), "rocket/task_list.xml").launch();

STEP4

如果首页需要等待某几个必要任务执行完毕才能开始使用,可以使用public static void ensureTasks(String... taskNames)接口,这个接口后的代码会一直等待直到任务完成才能执行。

//页面依赖test2的任务@RocketDependency({"test2"})public class SecondActivity extends AbsActivity {}

详细说明

Rocket-Android启动任务调度框架

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:HelperLib 一套适合敏捷开发,基于MVP模式开发框架
下一篇:Kaspresso是一个基于Espresso、UIAutomator和Kakao的强大UI测试框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~