Android冷启动和热启动以及冷启动优化方案

article/2025/11/8 7:24:14

1、什么是冷启动和热启动

  1. 冷启动:
    当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动,也就是先实例化Application。
  2. 热启动:
    当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,也就是直接从进程中启动,不需要重新创建Application,这个方式叫热启动。

2、启动的时候白屏/黑屏问题

  1. 引起白屏的原因
    白屏或黑屏,具体是哪一个,取决于app的Theme使用的是dark还是light主题Android Studio 引起的白屏2.x时代的AS开启了instant run以后可能会导致白屏,但实际完整的apk包不会出现此问题冷启动引起的白屏/黑屏点击你app那一刻到系统调用Activity.onCreate()之间的时间段。在这个时间段内,WindowManager会先加载app主题样式中的windowBackground作为app的预览元素,然后再真正去加载activity的layout布局暖启动/热启动引起的白屏/黑屏
    这点在配置较好,内存空间充足的手机上不是很明显,但低端手机或者内存吃紧的情况下依旧会出现”闪屏”效果,持续时间很短,一闪而过

3、具体有哪些阶段可优化呢?

点击app以后到初始化Application之间这段时间,系统接管,从Zygote进程中fork创建新进程,GC回收等等一系列操作,和我们app无关

在这里插入图片描述
从上图可以看到,整个冷启动流程中至少有两处onCreate,分别是Application和Activity,整个流程都是可控的。所以,onCreate方法做的事情越多,冷启动消耗的时间越长

4、启动时间的计算

  1. Logcat 自动打印
    从Android 4.4(API 19)开始,Logcat自动帮我们打印出应用的启动时间。这个时间从应用启动(创建进程)开始计算,到完成视图的第一次绘制(即Activity内容对用户可见)为止。

  2. Activity的reportFullyDrawn()
    我们可以在Activity的任意位置调用此方法已打印你想看到的、执行完某个方法的最终时间。它会在Logcat里打印从apk初始化(和前面Displayed的时间是一样的)到reportFullyDrawn()方法被调用用了多长时间

5、优化方案

  1. 从启动流程分析

    减少两处onCreate()中的初始化操作,将部分初始化移动到IntentService中进行

  2. 从用户体验分析
    将app首页的按返回键响应修改为响应Home键。让用户以为app确实退出了,但是实际上是点了Home键。如此一来,下次点击app图标的时候,直接唤起,不需要进行初始化操作,主要可以避免再次走闪屏页。

  3. 首界面加载
    利用Google官方文档推荐的方式,我们将启动页界面的主题设置为SplashTheme。此界面是冷启动后首先加载的界面

冷启动:冷启动其实就是电脑启动的一种方式,当电脑切断电源,在关机状态下按下POWER启动计算机。

热启动:在计算机已经开启的状态下,通过菜单,任务管理器,快捷键或键盘重新引导操作。

在APP中:

当用户启动应用程序时,后台没有该应用程序的进程,这时系统会重新给应用程序分配一个进程,这种方法就叫冷启动。

当用户启动应用程序时,后台已经有了该程序的进程(通过,退出,home键退出让应用程序在后台继续执行)当再次点开APP马上能够恢复到上次使用的状态,不需要再回到手机的首页打开应用程序,这个方式就叫热启动。

共同点:

无论是冷启动还是热启动,都要重新上电,检测硬件,将RAM区清零,即所有变量都初始化为0。


http://chatgpt.dhexx.cn/article/KgFh0FtM.shtml

相关文章

冷启动和热启动的区别android,app冷启动和热启动的区别(详解两者定义及区别)...

介绍一下 app 冷启动和热启动方式来实现 app 秒开的效果。那么,先来看看什么叫冷启动和热启动。 冷启动:指 app 被后台杀死后,在这个状态打开 app,这种启动方式叫做冷启动。 热启动:指 app 没有被后台杀死,仍然在后台运行,通常我们再次去打开这个 app,这种启动方式叫热…

热启动和冷启动以及复位启动的小知识

热启动和冷启动的区别: 1、重启是热启动。开机是冷启动。 2、热启动是通过开始菜单、任务管理器或者快捷键,重新启动计算机,叫热启动。冷启动是在关机状态下按POWER启动计算机,叫做冷启动 。 3、热启动是在计算机已经开启的状态…

dimen属性报错

<TextViewandroid:id"id/tvQuote1"android:layout_width"fill_parent"android:layout_height"wrap_content"android:textColor"#FFFFFF"android:textSize"dimen/text_size" /> 发现问题是dimen属性出现错误 别的手机上…

解决android:padding=“@dimen/activity_vertical_margin“> 标红问题

解决android:padding“dimen/activity_vertical_margin”> 标红问题 如果有这个问题&#xff0c;可以在values中新建一个dimen.xml文件 在dimen.xml里增加如下代码&#xff1a; <?xml version"1.0" encoding"utf-8"?><resources><…

android:paddingTop=“@dimen/activity_horizontal_margin“报错(报红)解决方法

android:paddingTop"dimen/activity_horizontal_margin"报错&#xff08;报红&#xff09;解决方法 在app----->res----->values------>dimens.xml中添加如下代码&#xff1a; <dimen name“activity_horizontal_margin” / (后面还有一个尖括号)&#…

android 手机适配之values适配dimen值

android 适配屏幕的方式有很多,最方便最直接的无非就是适配values里的dimens文件值来进行适配. 张鸿洋大神已经写过一篇适配的文章,很详细 但是我在阅读的时候还是有点疑问,这个values-1920x1080到底是dp值还是手机分辨率,因为我在实际操作中发现这样一句话. 很明显可以看…

Android开发——AS插件批量解决XML中的String/Color/Dimen硬编码

1. 问题抛出 1.1 开发方面 对于日常开发中&#xff0c;每写一个"#333"&#xff0c;都要手动的在当前xml与colors.xml中来回切换&#xff0c;查看是否已经定义过&#xff0c;如果定义过则拿过来复用&#xff0c;如果没有就要新定义一个叫"#333"的资源名&a…

dimen.xml浅析

转自&#xff1a;http://blog.csdn.net/kazeik/article/details/8268721 有时候我们为了维护一个工程&#xff0c;或者想定义一个button样式&#xff0c;或textView样式&#xff0c;这些样式中包含着文字的大小&#xff0c;背景图片&#xff0c;前置图片等一些资源。而且这个…

android:屏幕自适应之dimen使用

From&#xff1a;4种必须知道的Android屏幕自适应解决方案&#xff08;求投票支持&#xff09; demo下载&#xff1a;http://www.eoeandroid.com/forum.php?modattachment&aidNjE0Njh8ZTIyZDA2M2N8MTMzODgyOTQxN3w1NzAwOTV8MTczOTcz 以下是Demo首页的预览图 一、细说 layo…

android屏幕适配,生成不同分辨率的dimen.xml文件

1.在项目下新建moudle&#xff0c;选择Java Library&#xff0c;如图&#xff1a; 2.编写工具类&#xff1a; public class DimenUtils {//文件保存的路径 是在该项目下根路径下创建 比如该项目创建的路径是C:\MyProject\&#xff0c;// 则保存的文件路径是C:\MyProject\Di…

Android 屏幕适配之屏幕分辨率(创建不同dimen)适配

由于目前流行的Android屏幕分辨率太多&#xff0c;再加上UI同事设计时经常使用px单位来设计&#xff0c;所以导致编写Android代码时适配是一个很大的问题。 以下是本人开发过程中的适配方案 仅供参考 附&#xff1a;目前手机主流分辨率列表&#xff1a;http://screensiz.es/pho…

Android dimen

转自&#xff1a;Android&#xff1a;dimen尺寸资源文件的使用 dimen.xml在values文件夹下面 <resources><!-- Default screen margins, per the Android Design guidelines. --><dimen name"btn_width">16dp</dimen><dimen name"bt…

Android开发-手机适配之dimen

1.dimen概念 dimen是用来定义尺寸的资源文件&#xff0c;默认路径&#xff1a;工程的res\values\dimens.xml&#xff0c;如下图所示&#xff1a; 做好dimens适配后的项目结构如下图所示&#xff1a; 2.dimen定义的尺寸资源作用 可以在res下创建不同分辨率的values目录&#xff…

APP性能之终端兼容优化分享

一、细说 layout_weight 目前最为推荐的Android多屏幕自适应解决方案。 该属性的作用是决定控件在其父布局中的显示权重&#xff0c;一般用于线性布局中。其值越小&#xff0c;则对应的layout_width或layout_height的优先级就越高&#xff0c;一般横向布局中&#xff0c;决定的…

展开说说:Android之dimens文件使用

一 创建文件 选中res - 右击 - new - Android Resource File&#xff0c;文件名填写dimens、type选择Values&#xff08;默认&#xff09;点击ok。 二 文件填写内容 在dimens.xml写入内容&#xff0c;比如字号、宽高 三 布局文件使用 demin/ 加 dimen的name属性即可使用其定…

符号执行-Angr

目录 预备知识1.关于Angr 实验目的实验环境实验步骤一实验步骤二实验步骤三 预备知识 1.关于Angr Angr是一个利用python开发的二进制程序分析框架&#xff0c;我们可以利用这个工具尝试对一些CTF题目进行符号执行来找到正确的解答&#xff0c;即flag。当然&#xff0c;要注意…

Angr 03_angr_symbolic_registers 多个输入的寄存器符号化

直接打开程序&#xff0c;发现要输入三个字符串。 用IDA打开程序&#xff0c;get_user_input把三个输入分别放入寄存器eax、ebx、edx。我们需要跳过输入这一步&#xff0c;直接让Angr把用符号向量来代替输入字符串。因此&#xff0c;我们需要改变程序入口&#xff0c;直接跳转…

angr 9二进制分析的常见问题集锦

问题&#xff1a; 用angr的库函数识别api去分析blob的二进制文件&#xff0c;报错。 AttributeError: ‘SimOS’ object has no attribute ‘syscall_library’ 原因&#xff1a; angr库函数识别不支持非CGC的二进制文件。 参考链接&#xff1a; https://github.com/angr/ang…

CTF 逆向工具angr的学习笔记

angr 概述如何学习题目列表00_angr_find01_angr_avoid02_angr_find_condition03_angr_symbolic_registers04_angr_symbolic_stack05_angr_symbolic_memory06_angr_symbolic_dynamic_memory07_angr_symbolic_file08_angr_constraints09_angr_hooks10_angr_simprocedures11_angr_…

angr初探

angr 安装与简单使用 介绍 angr 总结来说&#xff0c;angr用于逆向工程中进行二进制分析的一个python框架 具体介绍见其github主页angr 符号执行 符号执行 &#xff08;Symbolic Execution&#xff09;是一种程序分析技术。其可以通过分析程序来得到让特定代码区域执行的输…