美文网首页
冷启动和热启动

冷启动和热启动

作者: 纸狒 | 来源:发表于2019-07-06 10:05 被阅读0次

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

    二,冷启动流程

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


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

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

    相关文章

      网友评论

          本文标题:冷启动和热启动

          本文链接:https://www.haomeiwen.com/subject/dwvuhctx.html