一、什么是冷启动、热启动?

冷启动:

在启动应用时,系统中没有该应用的进程,这时系统会创建一个新的进程分配给该应用;

热启动:

在启动应用时,系统中已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程还是保留在后台);

二、冷启动、热启动的区别

冷启动:系统没有该应用的进程,需要创建一个新的进程分配给应用,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。 热启动: 从已有的进程中来启动,不会创建和初始化Application类,直接创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

三、冷启动时间的计算

API19 之后,系统会出打印日志输出启动的时间; 冷启动时间 = 应用启动(创建进程) —> 完成视图的第一次绘制(Activity内容对用户可见);

四、冷启动流程

Zygote进程中fork创建出一个新的进程; 创建和初始化Application类、创建MainActivity; inflate布局、当onCreate/onStart/onResume方法都走完; contentView的measure/layout/draw显示在界面上;

总结:

Application构造方法 –> attachBaseContext() –> onCreate() –> Activity构造方法 –> onCreate() –> 配置主题中背景等属性 –> onStart() –> onResume() –> 测量布局绘制显示在界面上。

五、冷启动的优化

减少在Application和第一个Activity的onCreate()方法的工作量; 不要让Application参与业务的操作; 不要在Application进行耗时操作; 不要以静态变量的方式在Application中保存数据; 减少布局的复杂性和深度;

1. 冷启动的定义

冷启动:启动应用前,系统中没有该应用的任何进程信息Application等,启动5s+。

1.1 冷启动时间的计算

这个时间值是从应用启动(创建进程)开始计算,到完成视图的第一次绘制(即Activity内容对用户可见)为止。

2. 热启动的定义

热启动:启动应用时,后台已有该应用的进程,内存中有应用相关Activity(home键退到桌面),启动1.5s+。

3. 温启动的定义

有一些文章有温启动这个启动类型。

温启动:启动应用时,后台已有该应用的进程,内存中没有应用相关Activity(back键退出应用,未清除进程),启动2s+。

冷热启动过程中,会执行的步骤不一样。

冷启动:系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

热启动:一个应用从新进程的创建到进程的销毁,Application只会初始化一次,所以不必创建和初始化Application,直接走MainActivity(包括一系列的测量、布局、绘制)。

二.冷启动流程

当点击app的启动图标时,安卓系统会从Zygote进程中fork创建出一个新的进程分配给该应用,之后会依次创建和初始化Application类、创建MainActivity类、加载主题样式Theme中的windowBackground等属性设置给MainActivity以及配置Activity层级上的一些属性、再inflate布局、当onCreate/onStart/onResume方法都走完了后最后才进行contentView的measure/layout/draw显示在界面上,所以直到这里,应用的第一次启动才算完成,这时候我们看到的界面也就是所说的第一帧。详细的参考:App(Activity)启动流程

总结应用的启动流程如下:

Application的构造器方 -> attachBaseContext() -> onCreate() -> Activity的构造方法 -> onCreate() -> 配置主题中背景等属性 -> onStart() -> onResume() -> 测量布局绘制显示在界面上。

三.如何对冷启动的时间进行优化

冷启动时,加载Application过程中,可能会消耗很多时间。如果不采取任何措施就会产生长时间的白屏或黑屏效果,让用户以为这个应用很卡。消除启动时的白屏/黑屏,请参考:Android冷启动实现APP秒开

1、什么是Android的冷启动时间?

冷启动时间是指用户从手机桌面点击APP的那一刻起到启动页面的Activity调用onCreate()方法之间的这个时间段。

2、在冷启动的时间段内发生了什么?

首先我们要知道当打开一个Activity的时候发生了什么,在一个Activity打开时,如果该Activity所属的Application还没有启动,那么系统会为这个Activity创建一个进程(每创建一个进程都会调用一次Application,所以Application的onCreate()方法可能会被调用多次),在进程的创建和初始化中,势必会消耗一些时间,在这个时间里,WindowManager会先加载APP里的主题样式里的窗口背景(windowBackground)作为预览元素,然后才去真正的加载布局,如果这个时间过长,而默认的背景又是黑色或者白色,这样会给用户造成一种错觉,这个APP很卡,很不流畅,自然也影响了用户体验。

android开发冷启动和热启动的区别,android 冷启动和热启动相关推荐

  1. android 开发对gif解码(适配android 4.2、4.3、4.4版本)

    android 开发对gif解码(适配android 4.2.4.3.4.4版本) 使用方法: public class ImageInputActivity extends Activity imp ...

  2. Android 开发 关于APP无法安装到Android模拟器上的问题

    Android 开发 关于APP无法安装到Android模拟器上的问题 我们在创建一个app后,打算安装到Android模拟器上.可能会出现无法安装,或者提示已经安装无法卸载的问题.这个时候需要添加兼 ...

  3. Android开发中遇到的问题(四)——Android中WARNING: Application does not specify an API level requirement!的解决方法

    Android开发中遇到的问题(四)--Android中WARNING: Application does not specify an API level requirement!的解决方法 参考文 ...

  4. android开发用百度识别图片格式,Android开发学习之路-机器学习库(图像识别)、百度翻译...

    对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...

  5. Android开发之路--(2)--Android四大组件

    版权声明:本文为博主原创文章,转载请标明出处. https://blog.csdn.net/lyhhj/article/details/47214197     说实话我对Android的理解还是比较 ...

  6. Android开发实战三之导入现有Android工程项目

    选择Create project from existing sample 打开Eclipse环境后,在左上方的菜单上选择[File->New->Project],会弹出[New Proj ...

  7. 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程(转)

    引言 在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入Android浪潮的朋友们,为了确保大家能顺利完成开发环境的 ...

  8. android开发使用c+_如何在Android项目中开始使用C ++代码

    android开发使用c+ by Onur Tuna 通过Onur Tuna 如何在Android项目中开始使用C ++代码 (How to start using C++ code in your ...

  9. Android基础之用Eclipse搭建Android开发环境和创建第一个Android项目(Windows平台)...

    原地址:http://www.cnblogs.com/allenzheng/archive/2012/11/10/2762379.html 一.搭建Android开发环境 准备工作:下载Eclipse ...

最新文章

  1. 架构周报| 浅析MySQL JDBC连接配置上的两个误区
  2. [zz]一行代码解决iframe挂马(服务器端注入、客户端ARP注入等)
  3. SpringBoot整合Shiro权限框架
  4. Hadoop HDFS概念学习系列之HDFS升级和回滚机制(十二)
  5. vba 当前文件名_值得学习和珍藏的VBA常用编程代码语句
  6. 特斯拉柏林超级工厂叕被叫停,先交一个亿再说
  7. 拳皇全明星伺服务器维护,拳皇全明星5月31日更新公告_拳皇全明星5月31日更新内容介绍_玩游戏网...
  8. udev文件系统的使用和基本工作原理分析
  9. 【正点原子STM32连载】第一章 本书学习方法 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  10. 密码学专题 非对称加密算法指令概述 DH算法指令
  11. 毕业设计所用到的工具,需要了解的神器,不妨来看看,工具基本全了
  12. Bridge的父应用程序不是现用应用程序
  13. Laravel5.8调试消息队列RabbitMQ
  14. 微信小程序学习笔记(二)模板与配置
  15. Lerna 多 package 源代码管理方案
  16. 2020高考倒计时html,2020高考倒计时的励志说说
  17. C1. Simple Polygon Embedding(几何)
  18. 无线打印机服务器怎样设置密码,配置网络打印机服务器设置密码
  19. cs231n:assignment2——Q1: Fully-connected Neural Network
  20. 【纯音的世界】系列---【静音吧】爱.请给我时间.

热门文章

  1. wince4.2的中文输入法
  2. 【艾特淘】如何才能入池淘宝“猜你喜欢”?
  3. 27. 黑客常用端口利用总结
  4. static关键字和final关键字
  5. Check类中的incl、union,excl,diff,intersect
  6. 拨号vps会遇到什么问题?
  7. visual studio添加对项目的多版本sln配置
  8. 基于51单片机的自动售货机Proteus仿真
  9. 为什么有人就是不信35岁以后多数人都会失业?让你们看看我真实的经历,有图有真相
  10. totolink固件获取(硬件方法)