1、冷启动(App进程创建)

系统不存在App进程(APP首次启动或APP被完全杀死)时启动APP
此时,APP的启动将经历两个阶段:

第一阶段:
1、加载并启动app;
2、app启动后,第一时间为app显示一个空白的window;
3、创建app进程
4、第二阶段:
5、系统一旦创建了app进程,app进程就要负责做以下的任务:

创建app对象;
1、启动主进程ActivityThread;
2、创建MainActivity;
3、渲染视图;
4、执行onLayout;
5、执行onDraw
6、完成第一次绘制后,把mainActivity替换已经展示的BackgroundWindow,即空白window。

2、热启动(Activity已创建,从后台到前台)

当我们按了Home键或其它情况app被切换到后台,再次启动app的过程。
热启动时,系统将activity带回前台。如果应用程序的所有activity存在内存中,则应用程序可以避免重复对象初始化、渲染、绘制操作。
如果由于内存不足导致对象被回收,则需要在热启动时重建对象,此时与冷启动时将界面显示到手机屏幕上一样。

3、温启动(App进程存在,但Activity结束)

温启动包含了冷启动的一些操作,由于app进程依然在,温启动只执行冷启动的第二阶段,这代表着它比热启动有更多的开销。

温启动有很多场景,例如:

用户按连续按返回退出了app,然后重新启动app;
由于系统收回了app的内存,然后重新启动app。

关于直接杀死进程
这里我们应该很好去理解,Android中的每一个App都是运行在自己VM实例之中(沙盒)。每一个VM实例在linux中又是一个单独的进程,通过任务管理杀掉一个进程,那么对应进程里面的数据全部被回收掉。

这里是引用关于返回键退出
通过对源码的追溯,如果不对onBackPressed()做特殊的处理,无论是AppCompatActivity还是android.app.Activity,发现都会通过执行onBackPressed(),最后到Activity的finish()方法,也就是说当App退出到根的时候,最终只是执行的是当前App根Activity的finish()方法,整个App“依然在运行”,只是看不到界面了,那么也就是说,如果在App中运行的Service之类的后台任务并没结束,仍然在运行。

4、开发小Tips

我们可以在APP的Application中去监听到某些信息进行判断是怎么样的启动方式,某些需求在极端情况下会出现在后台响应,但此时Activity被回收,用户响应反馈后进入APP发现Activity重建,原响应消失的情况,可以进行某些恢复处理。

App三种启动场景:冷启动、热启动、温启动相关推荐

  1. app启动流程:冷启动,热启动,暖启动

    前言:项目中被诟病多媒体开机第一次启动很慢,大约3s的黑屏,后续点开启动正常,其中什么原理呢?这就涉及到系统的三种启动模型 1.Cold Start,冷启动 system---> loding ...

  2. GPS 冷启动 热启动 温启动 的区别

    [问题]最近调试GPS模块发现这样一个问题,昨天我还能定位,但是今天就无法定位了 一般是上一次使用的时候没有正常关闭GPS.请重新启动设备后再连接一下,如果还是不行就对GPS进行冷启动处理.在今后的使 ...

  3. GPS入门 3 —— GPS的热启动、冷启动和温启动 [转]

    GPS入门 3 -- GPS的热启动.冷启动和温启动 [转] (2008-10-11 18:41:10) <script> var $tag='gps'; var $tag_code='a ...

  4. 应用Quick BI实现首购用户和用户首购的三种运营场景监控

    导读: 首购用户和用户首购是互联网公司运营中最简单.最常遇到.也最容易混淆的两个概念.运营人员与BI经常在首购用户和用户首购上沟通不畅,信息不对称造成理解偏差,导致数据仓库模型或者BI仪表板一改再改. ...

  5. Spark Streaming三种运行场景

    三种运行场景描述 无状态操作 有状态操作 updateStateByKey window 场景一(无状态操作)描述: 对于无状态操作,每次操作都只是计算当前时间切片的内容,例如每次只计算一秒钟时间切片 ...

  6. java get请求传参_Java-ThreadLocal三种使用场景

    ThreadLocal对于每一位Java读者而言我想可能都不陌生,因为面试基本都会被问到. Java-ThreadLocal三种使用场景 关于ThreadLocal JDK1.2的版本中就提供java ...

  7. gps冷启动,温启动和热启动源码分析

    GpsLocationProvider.java 在全局定义了一个通往底层的方法,这个就是关联到flags是什么,通常做底层会封装好改接口,然后告诉你传递什么值对应着以什么方式启动,比如传入参数:冷启 ...

  8. Java-ThreadLocal三种使用场景

    关于ThreadLocal JDK1.2的版本中就提供java.lang.ThreadLocal类,每一个ThreadLocal能够放一个线程级别的变量, 它本身能够被多个线程共享使用,并且又能够达到 ...

  9. 最佳实践丨三种典型场景下的云上虚拟IDC(私有池)选购指南

    简介:业务上云常态化,业务在云上资源的选购.弹性交付.自助化成为大趋势.不同行业的不同客户,业务发展阶段不一样,云上资源的成本投入在业务整体成本占比也不一样,最小化成本投入.最大化业务收益始终是不同客 ...

最新文章

  1. MQ和RabbitMQ作用特点
  2. zigbee抗干扰matlab仿真,基于Zigbee的扩频通信MATLAB仿真.doc
  3. Yaas上传附件的技术实现
  4. Base PyQt4, Simple Web APP Framwork
  5. win10高分辨率下修改字体显示大小(不是缩放百分比)
  6. linux 日志定时轮询流程详解(logrotate)
  7. sample语言词法分析_Go 译文之词法分析与解析 Part Three
  8. c++按行读取txt文件中的内容,并按特定字符分割
  9. 宏碁e5-572g重装linux,Acer-E5-572G笔记本U盘装原版win10系统教程
  10. 微星主板黑苹果_黑苹果配件选择精细篇
  11. 28335和C语言数据存储检索
  12. 喜欢是可以培养的,学习也是
  13. 计算机课程之间的关系
  14. QT项目负责人必须掌握的Ui设计师功能——Promote to !
  15. 01 hbuilder账号的注册
  16. 个人免签支付如何对接微信支付宝?
  17. springboot 配置文件的所有属性
  18. offsetParent、offsetTop、offsetLeft、offsetHeight、offsetWidth
  19. Pycharm中怎么给字典中的多个键-值对同时加上单引号
  20. probit logit

热门文章

  1. long long10进制转16进制代码
  2. golang的panic
  3. Event Trigger 使用方法
  4. 扩充计算机内存是扩充什么,怎样扩大电脑内存 电脑扩大内存方法【图文】
  5. mysql实验五索引和数据完整性_实验六 索引和数据完整性约束
  6. 用累积分布函数(CDF)计算期望
  7. java字符转转长整型_P104 将数字字符串转换成长整型整数 ★★
  8. fcitx重启 linux_【Linux基础】Fcitx中文输入法安装
  9. system pause
  10. 左神算法中级班第三课[C++代码]