冷启动和热启动

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

二,冷启动流程

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


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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.定义 1. 冷启动的定义 冷启动:启动应用前,系统中没有该应用的任何进程信息Application等,启动5s...
    HungerDeng阅读 2,238评论 0 1
  • 一、什么是冷启动、热启动? 冷启动:在启动应用时,系统中没有该应用的进程,这时系统会创建一个新的进程分配给该应用;...
    GexYY阅读 20,966评论 0 11
  • 冷启动和热启动APP 启动分为冷启动(Cold Launches),当 APP 长时间没有被启动的时候,用户再次启...
    贝灬小晖阅读 2,394评论 1 0
  • 人别太善良,也别太大方 时间久了 你身边的人就会觉得 你所做的一切都是你应该的 即使有一天你撑不住了,累了 也没有...
    尽管人潮拥挤阅读 368评论 0 1
  • 考场如人生,有多少挫折就有多少希望,有多少梦想,就有多么坚定执着的脚步,跨越2000公里的距离来打这场仗,面对40...
    梦想多远行多远阅读 129评论 0 1