冷启动和热启动

一,什么是冷启动和热启动

二,冷启动流程

三,怎么对冷启动进行优化


一,什么是冷启动和热启动

定义:冷启动就是启动应用前,系统中,没有该应用的任何进程信息(系统内先创建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不能使用在要将数据存储在磁盘上的情况

你可能感兴趣的:(冷启动和热启动)