android开发工具箱!美团Android开发工程师岗位职能要求,系列篇

前言

对于android开发,我们大部分工作都是在应用层,但为了体现"技术含量",以及"知其所以然",以便在遇到具体问题时不至于束手无策,因此有必要了解底层的工作机制。

比如Android NDK 开发可能在平时的项目开发中不常用到,但是这并不代表其不重要。相反NDK的学习有助于加深开发者在阅读框架的源码理解,是Android开发人员的进阶过程中必须要掌握的技能。

为什么NDK越来越重要了?

一是短视频、直播等行业迅猛发展。音视频+社交成为流量新的增长点。近两年,短视频、直播、网络视频等行业不断爆热,其中抖音一骑绝尘,日活已破2.5亿,替代QQ/微信登上19年猪年春晚,成为又一国民级APP。

二是新一轮技术如人工智能、5G、物联网等新技术的融合发展,将不断寻找实用落地点,这在移动为王的年代,80%市场份额的安卓是最大受益者。据运营商消息,2019年下半年,5G手机在国内上市,2020年全面商用,届时音视频将迎来又一波热潮。

而在实际具体应用上,除了上面提到的短视频方向,还有各大视频应用,图像处理、滤镜、裁剪等等骚操作都是需要专业的音视频开发知识才能做出来的。

启动模式

要准确的测量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频率,也会影响启动的时间

最后

赠送大家一套完整的Android学习资料吧。

以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。

后面我就自己整理了一套资料,还别说,真香!

资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。

附上白嫖地址:《Android架构视频+BATJ面试专题PDF+学习笔记》

系列教程图片

2020Android复习资料汇总.png

flutter

NDK

设计思想开源框架

[外链图片转存中…(img-xZEsJwxL-1611133487861)]

[外链图片转存中…(img-d2koRUMO-1611133487862)]

微信小程序

猜你喜欢

转载自blog.csdn.net/fanzhang_vip0723/article/details/112898199