前言
我们点击Android应用图标启动应用程序的时候,有时候可以马上启动,但有时候很缓慢并进入空白页,这是为什么呢?这是因为Android的启动方式分为冷启动和热启动。
Android启动方式
Android启动方式有两种:冷启动,热启动
冷启动:在安卓系统中,系统为每个运行的应用至少分配一个进程 (多进程应用申请多个进程) 。从进程角度上讲,冷启动就是在启动应用前,系统中没有该应用的人和进程信息 (包括 Activity、Service 等) 。所以,冷启动产生的场景就很容易理解了,比如设备开机后应用的第一次启动,系统杀掉应用进程 (如:系统内存吃紧引发的 kill 和 用户主动产生的 kill) 后 的再次启动等。那么自然这种方式下,应用的启动时间最长,因为相比另外两种启动方式,系统和我们的应用要做的工作最多。
应用发生冷启动时,系统有三件任务要做:
1.开始加载并启动应用;
2.应用启动后,显示一个空白的启动窗口;
3.创建应用进程信息;系统创建应用进程后,应用就要做下面这些事情:
1.初始化应用中的对象 (比如 Application 中的工作);
2.启动主线程 (UI 线程) ;
3.创建第一个 Activity;
4.加载内容视图 (Inflating) ;
5.计算视图在屏幕上的位置排版 (Laying out);
6.绘制视图 (draw)。
热启动:当启动应用时,后台存在该应用的进程(back键,home键,应用退出,但是没有销毁),从已有的进程中启动。
热启动的特点:从已有的进程中启动,不需要创建和初始化Application ,直接创建和初始化它的Launch Activity
优化冷启动时间
1.application的启动优化:Application启动会经过attachBaseContext-->onCreate;
这两个方法不执行完是不会出现lanucher页面的,所以我们需要对attachBaseContext和onCreate进行优化。
2.启动页优化:application优化完了以后,就会执行启动页的onCreate,我们发现oncreate一旦耗时,也会导致启动页有一瞬间的卡顿,精益求精,我们把启动页的启动逻辑延迟初始化并通知application进行初始化,然后等待application初始化完成的事件之后,继续往下走,直到进入主页; 启动页的优化逻辑比较简单,只是纯业务的上的调整。
3.主页优化:主要优化onCreate即可。把可以放线程初始化的都放到线程里去。
参考:https://juejin.im/entry/582adaad570c35006cdcb615
测试应用启动时间
1.可以通过代码打桩,计算启动时间
2.可以通过秒表计算(肉眼观察,这个很low)
3.通过adb命令:
adb shell am start -W [packageName]/[packageName.launchActivity]
网友评论