冷启动、热启动、温启动

冷启动、热启动、温启动
1. 冷启动
启动app时,后台没有app的进程,或者进程被killed,这叫冷启动。冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

2. 热启动
启动app时,后台已有app的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。
热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化Application,因为一个应用从新进程的创建到进程的销毁,Application只会初始化一次。

3. 温启动
介于冷启动和热启动之间, 一般来说在以下两种情况下发生:
用户back退出了App, 然后又启动. App进程可能还在运行, 但是activity需要重建。用户退出App后, 系统可能由于内存原因将App杀死, 进程和activity都需要重启, 但是可以在onCreate中将被动杀死锁保存的状态(saved instance state)恢复。

通过三种启动状态的相关描述, 可以看出我们要做的启动优化其实就是针对冷启动. 热启动和温启动都相对较快.


参考 https://www.jianshu.com/p/c2e026d1d726

### 不同类型的启动方式及其区别 #### 冷启动 (Cold Start) 冷启动是指当应用程序首次启动或是在后台被完全关闭后重新启动的情况。在这种情况下,操作系统会加载应用程序的所有组件并初始化其环境设置[^1]。此过程涉及读取配置文件、建立网络连接其他必要的准备工作,因此通常耗时较长。 对于移动设备而言,在冷启动期间可能会经历以下具体操作: - 加载应用图标启动画面 - 初始化主线程及创建主Activity实例 - 解析AndroidManifest.xml来获取权限声明等信息 - 执行自定义的SplashScreen逻辑(如果有) ```java // Java代码示例:MainActivity.java 中的部分实现可能涉及到冷启动流程的一部分 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 这里可能是执行一些初始化工作的位置... } ``` #### 温启动 (Warm Start) 温启动发生在应用程序部分资源仍然存在于内存中但未处于前台运行状态下再次激活之时。这意味着某些数据结构已经被缓存下来而无需重复构建;然而,如果因为系统资源紧张而导致这些缓存的数据丢失,则仍需像冷启动那样重建对象[^3]。总体来说,相较于冷启动温启动所需时间较短,因为它不需要从头开始加载整个程序的状态。 #### 热启动 (Hot Start) 热启动指的是用户暂时离开当前活动的应用程序再返回的情形下发生的重启行为。此时,大多数时候该应用并没有真正意义上退出过,而是保持在一个暂停状态等待恢复。所以,只要没有发生意外情况(比如内存清理),那么几乎瞬间就能完成切换回到原来的位置继续使用[^4]。 --- | 特征/类型 | 冷启动 | 温启动 | 热启动 | | --- | --- | --- | --- | | **描述** | 应用初次打开或是彻底结束后的重开 | 部分资源仍在内存中的二次开启 | 用户短暂离线后再回来使用的快速响应 | | **特点** | 完整加载所有必要组件<br>耗时最多 | 利用了残留于RAM内的缓存资料<br>速度介于两者之间 | 几乎即时呈现先前界面<br>最快体验 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值