一,什么是冷启动和热启动
二,冷启动流程
三,怎么对冷启动进行优化
一,什么是冷启动和热启动
定义:冷启动就是启动应用前,系统中,没有该应用的任何进程信息(系统内先创建Application类再创建MainActivity类)
热启动就是用户使用返回键退出应用,然后又重新启动应用(直走MainActivity类然后进行初始化)
冷启动的时间计算:
这个时间值从应用启动(创建进程)开始计算,到完成视图的第一次绘制(即Activity内容对用户可见)为止
二,冷启动流程
zygote进程中fork创建一个新进程
创建和初始化Application类,创建MainActivity类inflate布局,当onCreate()/onStart()/onResume()方法都走完,contentView的mesure/layout/draw显示在界面上
Application的构造器方法----->attachBaseContext()-------->onCreate()---------->Activity的构造方法-------->onCreate()-------->配置主题中背景等属性-------->onstart()------------>onResume()--------->测量布局显示在界面上
三,冷启动优化
1,减少onCreate()方法的工作量(可在Application中做)
2,不要让application参与业务的操作,懒加载
3,不要再application中进行耗时操作
4,不要以静态变量的方式在application中保存数据,因为生命周期与app一样,内存泄漏
5,布局。mainThread,在子线程中加载
四,其他优化
1,Android中不用静态变量存储数据
2,有关sp的安全问题
3,内存对象序列化
4,避免在ui线程中做繁重的操作
解释1,Android中不用静态变量存储数据
静态变量等数据由于进程已经被杀死而被初始化,会导致进程不安全,
2,有关sp的安全问题
使用其它传输方式,例如文件,contentProvider,不能跨进程同步,存储sp文件过大问题,会阻塞线程,大量的临时对象会导致垃圾产生=>OOM
3,内存对象序列化:
将对象的状态信息转换为可以存储式传输的形式的过程
1,Serializable :接口,产生大量临时对象,频繁垃圾回收
2,Parcelable :Android中的序列化,不能把磁盘上的Data去序列化,进程间通信时用
5,五大存储:网络/数据库/sp/contentProvider/文件
对比Serializable和Parcelable
1,Serializable是java的序列化方式,Parcelable是Android特有的序列化方式
2,在使用内存的时候,Parcelable比Serializable性能高
3,Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC
4,Parcelable不能使用在要将数据存储在磁盘上的情况
网友评论