冷启动的定义:
冷启动就是应用启动前,系统中没有任何关于该应用的进程信息
什么情况下应用是冷启动
安装该应用后第一次点击应用的图标进入应用,或是杀死了该应用进程,再点击应用图标进入
这种情况下应用的启动时间是最长的,应用所做的准备工作也是最多的,
热启动和冷启动的区别
热启动是用户使用返回键退出应用,然后马上又重新启动应用
区别是:从定义上说冷启动后台没有该应用的进程,后台会创建一个进程分配给该应用,
而热启动的时候进程会保留在后台,因为是通过返回键或是home键退出的。在已有进程的情况下
启动应用就叫热启动。从特点上说因为冷启动启动应用的时候系统会重新创建一个新的进程并分配给应用,所以系统会首先创建Application类,然后再创建MainActivity类进行布局,测量,绘制,
最后会显示在界面上。而热启动不会创建Application,而只是创建MainActivity。因为一个新进程
的创建到进程的销毁,Application只初始化一次。
4.冷启动的时间计算:
这个时间应该是应用启动(创建进程)开始计算,到完成视图第一次绘制为止(activity的内容对用户可见)为止。
5.冷启动流程
Zygote进程中fork出一个新进程,创建和初始化application类,创建MainActivity类,
inflate布局,oncreate/onstart/onresume都走完,contentview measure/layout/draw
显示到界面上。
Application的构造方法->attchBaseContext()->oncreate()->Activity的构造方法->
oncreate->配置主题背景中的属性->onstart()->onresume->测量布局绘制到界面上
6.冷启动优化:
减少Application和MainActivity的oncreate的工作量,第三方sdk一般都在application中作初始化,我们可以用懒加载的方式对这些sdk做初始化,当真正需要的时候做初始化。
不要让Application参与业务的操作,不要在application作耗时操作,io操作
不要以静态变量的形式在application中保存数据,因为有很多问题,内存泄漏
减少布局复杂性,布局的深度,view的布局深度越多,测量绘制的时间就越长,要只初始化那些
需要直接让用户看到的view,用viewStub实现,在MainThread中进行耗时操作也会延迟启动的时间
共同学习,写下你的评论
评论加载中...
作者其他优质文章