赏金任务每周更新,请持续关注哦
题目
- 模拟面试场景,面试官提问以下问题,你如何回答。
- 启动性能指标:冷启动、暖启动、热启动、首屏启动,分别是什么?
参与方式
- 本帖下方回复你的答案即可
赏金
- 100元京东购物卡
活动时间
- 2023年4月3日 - 2023年4月9日
本周赏金任务汇总: 🌈 赏金任务发布 2023-04-03
本问题参与赏金活动,详情点击 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍
赏金任务每周更新,请持续关注哦
本周赏金任务汇总: 🌈 赏金任务发布 2023-04-03
本问题参与赏金活动,详情点击 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍
冷启动:比如开机后,点击屏幕的app图标启动应用。冷启动指的是该应用程序在此之前没有被创建,发生在应用程序首次启动或者自上次被终止后的再次启动。简单的说就是app进程还没有,需要创建app的进程启动app
暖启动: 温启动指的是App进程存在,但Activity可能因为内存不足被回收,这时候启动App不需要重新创建进程,只需要执行APP进程中的一些任务,比如创建Activity。
比如返回主页后,又继续使用其他的APP,时间久了或者打开的应用多了,之前应用的Activity有可能被回收了,但是进程还在。
热启动:热启动就是App进程存在,并且Activity对象仍然存在内存中没有被回收。
比如app被切到后台,再次启动app的过程
首屏启动: 作为普通应用,App进程的创建等环节我们是无法主动控制的,可以优化的也就是Application、Activity创建以及回调等过程。
关于启动加速方案
启动性能指标是用于衡量应用程序启动速度的关键指标。以下是各种启动性能指标的定义:
这些指标是衡量应用程序启动性能的关键指标,开发人员可以使用它们来优化应用程序的启动时间,提高用户体验。
启动性能指标通常包括以下几个方面:
1. 冷启动:
应用程序在完全关闭后再次启动,需要加载应用程序的所有资源,包括代码、库、数据等。冷启动时间比较长,通常需要数秒钟的时间,对于用户来说可能会感到不太友好,会影响用户的体验。
2. 暖启动:
应用程序仍然在后台运行,但被完全关闭后再次启动,需要重新加载一些资源,但不需要加载所有资源。暖启动时间比冷启动快一些,但仍然需要一定的时间。对于用户来说,暖启动相对于冷启动来说更加友好,但可能仍然会对用户的体验产生一些影响。
3. 热启动:
应用程序已经在内存中运行并再次打开,无需重新加载任何资源。热启动时间最快,通常只需要数毫秒的时间。对于用户来说,热启动是最友好的启动方式,不会对用户体验产生任何影响。
4.首屏启动:
应用程序启动后,显示在屏幕上的第一个页面或界面的加载时间。对于用户而言,首屏启动的速度很重要,因为它直接影响着用户的体验和使用意愿。
面试官问这种问题的目的是了解候选人对应用程序启动性能的了解和优化方法,以及他们对应用程序优化的重要性的认识。对于许多应用程序来说,启动时间对用户体验至关重要,因此优化启动性能可以提高应用程序的质量和用户满意度
面试时如何回答该问题?
回答这个问题时,需要先简要介绍一下冷启动、暖启动、热启动和首屏启动的概念,然后根据实际应用场景和具体的应用程序,对它们的启动方式和对用户的影响进行分析和比较。可以从以下几个方面回答:
最后,需要强调启动性能对用户体验的重要性,并且表现出自己对提高用户体验的热情和责任心。同时,还需要准备一些具体的案例或实际经验,以便在回答问题时举例说明。
通过举例说明四种启动的区别:
假设有一个社交类应用程序,用户在应用程序关闭状态下,分别进行了以下操作:
被问道这四种启动方式的启动性能好坏时可以这样回答:
受到多种因素的影响,例如:应用程序的复杂度、设备的性能、网络状况等等。因此,无法给出通常多久启动性能是好的具体时间。
但是,一般来说,启动时间越短,用户体验就越好。对于一款优秀的应用程序而言,它的启动时间应该尽可能地短,并且在不同启动情况下都能够快速响应用户的操作。
为了提高应用程序的启动性能,开发者可以采用多种优化手段,如:
加个鸡腿,当然由于以上的回答,可能延申的问题还有应用程序启动慢的原因?主要包括以下几个方面:
如何解决上述启动慢的问题呢?为了解决应用程序启动慢的问题,可以采取以下一些措施:
总结:
在实际应用中,启动速度对用户体验至关重要。如果启动速度很慢,用户可能会失去耐心,甚至会选择使用其他应用程序。因此,开发人员需要优化应用程序的启动性能,尽可能缩短启动时间,提高用户体验。同时,对于用户来说,熟悉应用程序的启动方式也可以帮助他们更好地使用应用程序,提高他们的满意度。
冷启动 ( Cold Start):指应用程序从完全关闭状态开始启动,即操作系统和服务都没有运行的状态。这种情况下,操作系统需要从备份文件中恢复数据,加载内核和其他必要的组件,通常需要较长的时间。
暖启动 ( Warm Start):指应用程序在上一次启动后没有被关闭,仍然在运行中的状态。这种情况下,操作系统可以更快地启动应用程序,因为内核和其他必要的组件都已经加载并运行中。
热启动 ( Hot Start):指应用程序在上一次启动后没有被关闭,并且操作系统和服务都没有运行的状态。这种情况下,操作系统可以直接从上一次启动的状态中恢复,通常可以更快地启动应用程序。
首屏启动 ( First Screen Load):指应用程序启动后,用户界面首次加载完成的时间。这个时间通常很短,通常在几毫秒到几秒之间。首屏启动时间的优化对于用户体验非常重要。
启动性能指标 | 定义 | 优点 | 缺点 | 优化策略 | 使用场景 |
---|---|---|---|---|---|
冷启动 | 第一次启动应用程序或服务时,应用程序或服务在内存中没有任何缓存信息,需要从头开始加载所有组件 | 无需考虑已经存在的缓存信息,可以体现出应用程序或服务的真实启动速度 | 需要较长的启动时间,用户体验较差 | 减少应用程序或服务启动过程中的IO操作,缓存经常使用的数据,预加载部分组件 | 用户第一次安装应用程序或服务时,或者长时间没有使用后再次启动 |
暖启动 | 应用程序或服务在一段时间内没有被使用,但是仍然保存在内存中,因此启动时可以使用已经存在的缓存信息 | 启动速度较快,用户体验较好 | 需要较长时间保存在内存中,占用内存较多 | 减少应用程序或服务启动过程中的IO操作,缓存经常使用的数据,预加载部分组件 | 用户切换应用程序或服务时 |
热启动 | 应用程序或服务在内存中已经存在缓存信息,因此启动速度非常快 | 启动速度极快,用户体验非常好 | 占用内存较多 | 减少应用程序或服务启动过程中的IO操作,缓存经常使用的数据,预加载部分组件 | 用户频繁切换应用程序或服务时 |
首屏启动 | 应用程序或服务在启动后,首先展示给用户的内容渲染完成的时间 | 用户可以尽快看到应用程序或服务的内容,提高用户体验 | 不能代表应用程序或服务完全启动的时间,某些后台操作可能仍在进行 | 减少首屏内容的渲染时间,提高首屏的响应速度 | 用户进入应用程 |
需要注意的是,以上表格中的启动性能指标并不是独立的,它们之间的关系是相互影响的。例如,减少应用程序或服务启动过程中的IO操作,缓存经常使用的数据,预加载部分组件这一优化策略可以同时提高冷启动、暖启动和热启动的性能表现。
在实际应用中,优化启动性能是非常重要的。因为启动时间对于用户体验有着非常重要的影响。对于移动应用程序或服务来说,尤其如此,因为移动设备的计算能力和网络连接速度相对较低,启动时间较长会给用户带来不必要的等待和不良的使用体验。
启动性能受到许多因素的影响,包括但不限于以下几个方面:
为了优化启动性能,可以采取以下具体措施:
因素 | 措施 | 示例 |
---|---|---|
应用程序或服务的复杂度 | 减少应用程序或服务的复杂度 | 优化代码结构和算法,减少代码行数和函数调用次数 |
资源加载的数量和大小 | 压缩资源文件、合并资源文件、延迟加载资源 | 压缩图片和CSS文件、合并JavaScript文件、延迟加载部分图片和CSS文件 |
系统资源的竞争 | 减少应用程序或服务的复杂度、异步加载资源 | 优化代码结构和算法、使用异步加载的方式 |
设备的硬件配置 | 无需特殊措施 | 无需特殊示例 |
首先需要明确app启动原理
app性能,还有app还有与app之间的交互,比如app中去用微博、微信等登录的场景, App交互的时候可以指定任意activity,activity之间的耦合性是很小的。
android官方的图如下:activity启动流程
第一步底层系统(可能是linux,安卓主要依赖于linux系统)启动app
第二步调起activity,创建白窗口什么都不做
第三步启动进程
第二件事:启动object,加载
启动一个object,onCreate,类似于去调用对象,紧接着去创建一个Mainthread,创建一个主线程;主要用来加载我们的activity,mainacticity(用来做页面的初始化,数据初始化,页面的渲染),到了displayed time的时候已经渲染完成,会对前面打开的空白窗口进行对调(要记住)
other stuff 可能页面已经加载完了 但是还没有加载完全,还有一个动态加载的过
这整个过程是非常快的
————————————————
系统不存在App进程(APP首次启动或APP被完全杀死)时启动APP
此时,APP的启动将经历两个阶段:
第一阶段
1.加载并启动app;
2.app启动后,第一时间为app显示一个空白的window;
3.创建app进程
第二阶段
系统一旦创建了app进程,app进程就要负责做以下的任务:
1.创建app对象;
2.启动主进程ActivityThread;
3.创建MainActivity;
4.渲染视图;
5.执行onLayout;
6.执行onDraw
7.完成第一次绘制后,把mainActivity替换已经展示的BackgroundWindow,即空白window。
一句话总结:冷启动:重新安装进行启动等,冷对应已经被kill掉了,重新启动,冷启动对应的就是上面分析的打开app的一个过程,不包括other stuff 一定要记住(场景:数据全被清掉了,或者重新安装启动)
当我们按了Home键或其它情况app被切换到后台,再次启动app的过程。
热启动时,系统将activity带回前台。如果应用程序的所有activity存在内存中,则应用程序可以避免重复对象初始化、渲染、绘制操作。如果由于内存不足导致对象被回收,则需要在热启动时重建对象,此时与冷启动时将界面显示到手机屏幕上一样。
一句话总结:热启动:说明app还活着,放在后台运行,去微信聊天再回来
温启动包含了冷启动的一些操作,由于app进程依然在,温启动只执行冷启动的第二阶段,这代表着它比热启动有更多的开销。
温启动有很多场景,例如:
这里我们应该很好去理解,Android中的每一个App都是运行在自己VM实例之中(沙盒)。每一个VM实例在linux中又是一个单独的进程,通过任务管理杀掉一个进程,那么对应进程里面的数据全部被回收掉。
通过对源码的追溯,如果不对onBackPressed()
做特殊的处理,无论是AppCompatActivity还是android.app.Activity,发现都会通过执行onBackPressed(),最后到Activity的finish()
方法,也就是说当App退出到根的时候,最终只是执行的是当前App根Activity的finish()方法,整个App“依然在运行”,只是看不到界面了,那么也就是说,如果在App中运行的Service之类的后台任务并没结束,仍然在运行。
一句话总结:暖启动:app在后台待得时间久了,可能系统已经杀掉了app内存,用户此时再重启app,其实会有一些object进行保留;初始化的时候会把加载的东西保存在手机上(这些并不会完全丢掉)
就是加上other stuff
总结:
最重要的是冷启动!
因为暖启动和热启动本来时间就很短,不需要优化了;
首屏启动建议时间只是做参考,没有太大意义。
在不同的应用程序中,启动性能指标可能会有所不同,但是通常来说,冷启动、暖启动、热启动和首屏启动是以下几个常见的启动性能指标: