本网站三天换一次域名,自己建服务器做网站违法,最流行的做网站语言,易企营销型网站建设企业android启动优化是个比较重要的部分#xff0c;也是一大难题#xff0c;一个优秀的app首先给人第一感觉就是启动速度#xff0c;启动速度非常影响用户的体验#xff0c;那么我们今天展开说说启动优化相关的问题。
我们先来简单分析一下启动过程、启动优化方向#xff0c;…android启动优化是个比较重要的部分也是一大难题一个优秀的app首先给人第一感觉就是启动速度启动速度非常影响用户的体验那么我们今天展开说说启动优化相关的问题。
我们先来简单分析一下启动过程、启动优化方向最后再运用我们的启动框架来优化这个过程。
一、启动流程
Click Event - IPC - Process.start - ActivityThread - bindApplication - LifeCycle - ViewRootImpl
首先用户会执行点击操作点击事件会触发一个IPC通信之后会触发一个Process.start方法用于进程的创建接着便会执行ActivityThread的main方法开启looper并且创建主线程handler接着会bindApplicaiton之后会执行activity的生命周期最后执行ViewRoot的渲染这时才会显示一个页面。 二、启动分析及优化方向
冷启动之前
启动app加载空白window创建进程
需要注意的是这些都是系统行为一般我们控制不了。 随后任务
创建application启动主进程创建MainActivity加载布局执行onCreate
通常首帧绘制结束我们就认为是启动已经结束了。
所以我们的优化方向就是applicaiton阶段跟activity生命周期阶段的耗时。 adb查看启动耗时
adb shell am start -W [packageName]/[AppstartActivity全路径]
执行后会得到三个时间ThisTime、TotalTime和WaitTimetotalTime包括 创建进程 Application初始化 Activity初始化到界面显示 的过程。 三、优化方案
主题切换 使用Activity的windowBackground主题属性预先设置一个启动图片layer-list实现在启动后在Activity的onCreate()方法中的super.onCreate()前再setTheme(R.style.AppTheme)。避免了白屏跟点击图标无响应。 三方库懒加载按需加载。 延时加载利用子线程来加载任务来减少主线程的耗时。 使用IdeaHandler 类加载优化在application中异步加载耗时长的类加载替换classloader获取到类加载时间。Class.forName只加载类本身及静态变量引用类new类会额外加载成员变量的引用类。 webview启动优化可以预先将其内核初始化加载到webview缓存池中。 页面数据预加载。 页面绘制层级优化。
四、启动框架实现
接下来就是我们的重头戏实现启动框架了。
启动框架主要要考虑
任务的依赖关系处理。比如A依赖BB依赖C类似这种情况我们要如何处理任务执行先后顺序哪些任务能延时哪些任务必须等待我们就需要用有向无环图进行拓扑排序。这个点大家可以自行了解一下很重要一般采用的是广度优先搜索算法线程池我们必然要统一线程池我们要判断任务是ios密集型任务还是cpu密集型任务类型。任务的优先级线程的优先级。任务等待CountDownLanuch。 下面的开源地址下载即用GitHub - liweidong93/anchor: 安卓启动框架java实现