android - Android中冷启动和热启动的区别
问题描述
根据官方 Android 文档:Cold Start - “如果您的应用程序自设备启动后首次启动,或系统终止应用程序”
热启动 - ”系统将您的应用程序从内存中逐出,然后用户重新启动它。
考虑以下场景:
应用程序 A 正在运行 -> 按主页按钮(应用程序进入后台) -> 现在在其他应用程序上工作 -> 系统检测到内存紧缩并杀死应用程序 A 以回收一些内存 -> 现在重新启动应用程序 A(从最近的应用程序或启动图标)
现在是热启动还是冷启动?根据冷启动的文档 - 它看起来是冷启动,因为应用程序在被系统杀死后首次启动(在后台)。
根据热启动的文档 - 它看起来是热启动的情况,因为它在被从内存中驱逐后重新启动。
哪一个是真的?这里错过了什么?
解决方案
冷启动的一个例子是您在启动设备后首次启动应用程序。当您清除最近的应用程序菜单时,也会发生这种情况。一切都将从头开始加载,并且从您的 Launch Activity 中的方法Bundle
返回的对象onCreate
将为空。
系统杀死您的应用程序以回收内存也称为进程死亡。在此发生之前onSaveInstanceState
,系统提供了一个捆绑包,用户可以在其中保存状态恢复数据。此捆绑包onCreate
在应用程序再次启动时可用。该应用程序仍将位于最近的应用程序菜单中,并且如果该状态保持并正确恢复,则用户在再次重新启动该应用程序时应该会有热启动的错觉。
推荐阅读
- elasticsearch - 是否可以使用拆分桶的值在 Kibana 直方图中订购拆分系列?
- handlebars.js - jsreport 2.0 BeforeRender 不工作
- python - CPLEX Python API:为什么在(大部分)默认参数设置下 CPLEX 12.8 比 CPLEX 12.5 需要更多时间来求解?
- android - Android强制Drawable以相同的高度和宽度绘制
- botframework - Bot ConversationData 属性即使只设置了一次也会被覆盖吗?
- amazon-web-services - AWS Rekognition 对响应文本块数量的限制?
- android - 添加哪个代码来使图像移动?
- c# - 参数超出范围异常,参数名称:名称
- excel - 使用 Apache POI 更新和加密现有 xlsx 文件
- iis - 使用 IIS 重写映射进行多站点迁移