App三种启动场景:冷启动、热启动、温启动
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三种启动场景:冷启动、热启动、温启动相关推荐
- app启动流程:冷启动,热启动,暖启动
前言:项目中被诟病多媒体开机第一次启动很慢,大约3s的黑屏,后续点开启动正常,其中什么原理呢?这就涉及到系统的三种启动模型 1.Cold Start,冷启动 system---> loding ...
- GPS 冷启动 热启动 温启动 的区别
[问题]最近调试GPS模块发现这样一个问题,昨天我还能定位,但是今天就无法定位了 一般是上一次使用的时候没有正常关闭GPS.请重新启动设备后再连接一下,如果还是不行就对GPS进行冷启动处理.在今后的使 ...
- GPS入门 3 —— GPS的热启动、冷启动和温启动 [转]
GPS入门 3 -- GPS的热启动.冷启动和温启动 [转] (2008-10-11 18:41:10) <script> var $tag='gps'; var $tag_code='a ...
- 应用Quick BI实现首购用户和用户首购的三种运营场景监控
导读: 首购用户和用户首购是互联网公司运营中最简单.最常遇到.也最容易混淆的两个概念.运营人员与BI经常在首购用户和用户首购上沟通不畅,信息不对称造成理解偏差,导致数据仓库模型或者BI仪表板一改再改. ...
- Spark Streaming三种运行场景
三种运行场景描述 无状态操作 有状态操作 updateStateByKey window 场景一(无状态操作)描述: 对于无状态操作,每次操作都只是计算当前时间切片的内容,例如每次只计算一秒钟时间切片 ...
- java get请求传参_Java-ThreadLocal三种使用场景
ThreadLocal对于每一位Java读者而言我想可能都不陌生,因为面试基本都会被问到. Java-ThreadLocal三种使用场景 关于ThreadLocal JDK1.2的版本中就提供java ...
- gps冷启动,温启动和热启动源码分析
GpsLocationProvider.java 在全局定义了一个通往底层的方法,这个就是关联到flags是什么,通常做底层会封装好改接口,然后告诉你传递什么值对应着以什么方式启动,比如传入参数:冷启 ...
- Java-ThreadLocal三种使用场景
关于ThreadLocal JDK1.2的版本中就提供java.lang.ThreadLocal类,每一个ThreadLocal能够放一个线程级别的变量, 它本身能够被多个线程共享使用,并且又能够达到 ...
- 最佳实践丨三种典型场景下的云上虚拟IDC(私有池)选购指南
简介:业务上云常态化,业务在云上资源的选购.弹性交付.自助化成为大趋势.不同行业的不同客户,业务发展阶段不一样,云上资源的成本投入在业务整体成本占比也不一样,最小化成本投入.最大化业务收益始终是不同客 ...
最新文章
- MQ和RabbitMQ作用特点
- zigbee抗干扰matlab仿真,基于Zigbee的扩频通信MATLAB仿真.doc
- Yaas上传附件的技术实现
- Base PyQt4, Simple Web APP Framwork
- win10高分辨率下修改字体显示大小(不是缩放百分比)
- linux 日志定时轮询流程详解(logrotate)
- sample语言词法分析_Go 译文之词法分析与解析 Part Three
- c++按行读取txt文件中的内容,并按特定字符分割
- 宏碁e5-572g重装linux,Acer-E5-572G笔记本U盘装原版win10系统教程
- 微星主板黑苹果_黑苹果配件选择精细篇
- 28335和C语言数据存储检索
- 喜欢是可以培养的,学习也是
- 计算机课程之间的关系
- QT项目负责人必须掌握的Ui设计师功能——Promote to !
- 01 hbuilder账号的注册
- 个人免签支付如何对接微信支付宝?
- springboot 配置文件的所有属性
- offsetParent、offsetTop、offsetLeft、offsetHeight、offsetWidth
- Pycharm中怎么给字典中的多个键-值对同时加上单引号
- probit logit