写点什么

android 算法面试题,附超全教程文档

发布于: 刚刚

启动模式

要准确的测量 APP 的启动时间,首先我们要了解 APP 整个启动过程。 启动过程,一般可以分为以下三类:



爱奇艺 Android 客户端启动优化与分析


从上图可以看出,启动过程中,Cold 的模式下,生命周期中做的事情最多,启动的时间最长,因此,我们以冷启动来衡量 APP 启动时间。启动过程中,如何判断哪些生命周期影响启动速度呢?

启动过程

我们知道,APP 的启动和运行,就是 Linux 系统创建进程和组件对象,并在 UI 线程中处理组件消息的过程。


启动过程图:



App 的启动过程,可以划分为三个阶段:

3.1 创建进程

当 APP 启动时,如果当前 app 的进程不存在,便会创建新的进程;App 主进程启动后,如果启动某个组件,并且该组件设置了 android:process 属性,组件所运行的进程不存在,也会创建新的进程。


需要注意的是,如果在启动阶段,初始化的组件中,包含了多个进程,便会创建多次进程,BindApplication 操作也会重复执行多次

3.2 创建 UI 线程及 Handler

进程创建后,会通过反射,执行 ActivityThread 入口函数,创建 Handler,并在当前线程中 prepareMainLooper,并在 Handler 中接收组件的消息,我们来看一下 Handler 中处理的消息:


  • LAUNCH_ACTIVITY,启动,执行 Activity

  • RESUME_ACTIVITY,恢复 Activity

  • BIND_APPLICATION,启动 app

  • BIND_SERVICE,Service 创建, onBind

  • LOW_MEMORY,内存不足,回收后台程序


sMainThreadHandler 中,处理的消息很多,这里只罗列了,可能在启动阶段可能会执行的操作, 这些操作都是运行在 Main Thread 中,对启动而言,属于阻塞性的。


Activity 生命周期,自然需要在启动阶段执行,但,对于 Service 的创建,Trim_memory 回调,广播接收等操作,就需要重点考虑,其操作耗时性。

3.3 Activity 运行及绘制

前两个过程,创建进程和 UI 线程及 Handler,都是由系统决定的,对 APP 开发者而言,并不能控制其执行时间,在本阶段,执行 BindApplication,和 Acitivity 生命周期,都是可以由开发者自定义。


Activity 执行到 onResume 之后,会执行至 ViewRootImpl,执行两次 performTraversals,第二次 traversal 操作中,会执行 performDraw 操作,同时通知 RenderThread 线程执行绘制.


从启动的三个阶段,我们可以看出,启动启动时间的长短,决定因素在于,主线程中所做事情消耗的时间的多少,所以,我们的优化工作主要集中在,排查主线程中耗时性的工作,并进行合理的优化。Android 手机,系统的资源是有限的,过多的异步线程,会抢占 CPU,导致主线程执行时间片间隔增大。同样的,内存消耗状态,GC 频率,也会影响启动的时间

总结

最后对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!


这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司 2021 年的面试题,把技术点整理成了视频和 PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。


相信它会给大家带来很多收获:




当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。


**本文已被[CODING 开源项目:《Android 学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](


)



收录**


最后自我介绍一下,小编 13 年上海交大毕业,曾经在小公司待过,也去过华为、OPPO 等大厂,18 年进入阿里一直到现在。

深知大多数初中级 Android 工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此也是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

用户头像

还未添加个人签名 2021.10.19 加入

还未添加个人简介

评论

发布
暂无评论
android算法面试题,附超全教程文档