洞察如何选择适合你的企业的小程序开源框架来实现高效开发与管理
1131
2022-10-21
SmartStart一个Android智能启动框架
SmartStart
Android智能启动框架
框架特性:
1、支持依赖关系
2、多样化任务:可选择延时任务、IO任务
1)支持延时加载:ApplicationTask会在Application.onCreate()结束前执行完,DelayTask可以配置延后执行。
2)支持区分io任务和cpu任务
3、智能多线程异步:根据CPU核数控制线程池大小
线程池过大,会增加多线程的切换时间;线程池过小,则不能充分利用CPU,SmartStart的实现机制:
1)Application任务执行时,会根据建立一个cpu线程池(限制cpu核数个线程)和一个的io线程池(无限制)
2)Delay任务执行时,会建立一个共用线程池(限制cpu核数-2个线程)
4、自学习优先级能力:根据上一次启动的任务链耗时,计算本次启动每个任务的优先级
1)原理介绍:App的启动任务拆解后,任务之间的依赖关系构成一个依赖图,最长的耗时路径可能决定着App的启动耗时。当线程池执行完一个任务后,如果有n个无依赖的任务需要被执行,一旦我们没有选择那个最高优先级的任务去执行,就一定会拉长最长耗时路径的执行总时间,那么App的启动时长就会增加,所以我们的关键问题是,如何对任务设置优先级。SmartStart的核心思想是通过构建上一次启动的依赖图,将以本任务为起点的最长耗时路径作为此任务下次启动的优先级。具体算法请阅读代码。
2)模拟启动:首先构建一个启动依赖图,并隐藏一条最长依赖链:01 - 04 - 21 - 23 - Article_Application_1 -51 - 71 - 91 - a2 - b5 - d1 - i2 - j1
首次启动图:(没有无法根据上一次启动计算优先级)
第二次启动图:(根据上一次启动过计算优先级)
我们发现,当有优先级规则时,01的启动将根据优先级提前,充分利用了cpu,将启动时长从3.8s优化到2.6s
框架接入:
1、增加依赖:
compile 'com.elvis.android:smart_start:1.0.1'
1、实现一个启动接口:
public static IModuleStart lockScreenModuleStart = new IModuleStart() { @Override public void buildTasks(ArrayList
2、在Application的相关位置调用SmartStart接口:
public class MyApplication extends Application { private static Handler mainHandler = new Handler(Looper.getMainLooper()); @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); // 初始化启动器 SmartStart.setContext(base); // 设置默认优先级 SmartStart.getDefaultPriorities("{}"); // 构建启动器 SmartStart.addModuleStart(LockScreenManager.lockScreenModuleStart); SmartStart.addModuleStart(ArticleManager.articleModuleStart); ... // 开始执行ApplicationTasks SmartStart.startApplicationTasks(); } @Override public void onCreate() { super.onCreate(); // 等待ApplicationTasks执行结束 SmartStart.waitUntilApplicationTasksFinish(); // 5s后开始执行DelayTasks mainHandler.postDelayed(new Runnable() { @Override public void run() { SmartStart.startDelayTasks(); } },5000); }}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~