Android Framework是Android操作系统的核心部分,目前大部分公司的app开发都是基于模块化、层次化、组件化、控件化的思路来设计架构,而这一切的基础都建立在Android Framework系统框架之上。
试想一下,如果没有它提供的一系列的API、类库和服务,我们如何能构建高质量的Android应用程序,正因如此,熟悉它成为了企业招聘Android开发者的要求之一。
这就直接导致,它成为了现在企业常问的面试题。(开发者直言太难了…)
接下来以大厂面试题的方式给大家总结一下Framework内核:
描述一下 android 的系统架构(阿里 咸鱼一面)
从小到上就是:
linux kernel,lib dalvik vm ,application framework, app
Framework 工作方式及原理,Activity 是如何生成一个 view 的,机制是什么(字节架构岗一面)
Framework是android 系统对 linux kernel,lib库等封装,提供WMS,AMS,bind机制,handler-message机制等方式,供app使用。
简单来说framework就是提供app生存的环境。
1)Activity在attch方法的时候,会创建一个phonewindow(window的子类)
2)onCreate中的setContentView方法,会创建DecorView
3)DecorView 的addview方法,会把layout中的布局加载进来。
Activity 创建一个 view 是通过 ondraw 画出来的, 画这个 view 之前呢,还会调用 onmeasure方法来计算显示的大小.
Surfaceview 是直接操作硬件的,因为视频播放对帧数有要求,onDraw 效率太低,不够使,Surfaceview 直接把数据写到显存。
为何主线程可以new Handler如果想要在子线程中new Handler要做些什么准备?(字节架构岗二面)
每一个Handler必须要对应一个Looper主线程就会自动创建Looper对象,不需要我们手动创建,所以主线程可以直接创建Handler
在new Handler的时候没有传入制定的Looper就会默认绑定当前创建Handler的线程的Looper,如果没有Looper就报错。
因为在主线程中,Activity内部包含一个Looper对象,它会自动管理Looper处理子线程中发送过来的消息。而对于子线程而言,没有任何对象帮助我们维护Looper对象,所以需要我们手动维护。
所以要在子线程开启Handler要先创建Looper,并开启Looper循环
如果在子线程中创建一个Handler,那么就必须做三个操作
- Prepare();
- loop();
- quit();
系统启动流程详细分析,学会这些,惊呆面试官
其实中间还贯穿着许多知识点,在这就不跟大家一一细说。
如果你想更深入更系统性的了解Android Framework架构的话,这里特邀前三星/小米研发经理Avlin老师 ,给大家整理了一份最新版Android Framework源码解析,需要的直接扫码免费领取。
第一章 系统启动流程分析
- 第一节 Android启动概览
- 第二节 init.rc解析
- 第三节 Zygote
- 第四节 面试题
第二章 跨进程通信IPC解析
- 第一节 Sercice 还可以这么理解
- 第二节 Binder基础
- 第三节 Binder应用
- 第四节 AIDL应用(上)
- 第五节 AIDL应用(下)
- 第六节 Messenger原理及应用
- 第七节 服务端回调
- 第八节 获取服务(IBinder)
- 第九节 Binder面试题全解析
第三章 Handler源码解析
- 第一节 源码分析
- 第二节 难点问题
- 第三节Handler常问面试题
第四章 AMS 源码解析
- 第一节 引言
- 第二节 Android架构
- 第三节 通信方式
- 第四节 系统启动系列
- 第五节 AMS
- 第六节 AMS 面试题解析
第五章 WMS源码解析
- 第一节 WMS与activity启动流程
- 第二节 WMS绘制原理
- 第三节 WMS角色与实例化过程
- 第四节 WMS工作原理
- …
第六章 Surface源码解析
- 第一节 创建流程及软硬件绘制
- 第二节 双缓冲及SurfaceView解析
- 第三节 Android图形系统综述
- …
第七章 基于Android12.0的SurfaceFlinger源码解析
- 第一节 应用建立和SurfaceFlinger的沟通桥梁
- 第二节 SurfaceFlinger的启动和消息队列处理机制
- 第三节 SurfaceFlinger 之 VSync(上)
- 第四节 SurfaceFlinger之VSync(中)
- 第五节 SurfaceFlinger之VSync(下)
- …
第八章 PKMS源码解析
-
第一节 PKMS调用方式
-
第二节 PKMS启动过程分析
-
第三节 APK的扫描
-
第四节 APK的安装
-
第五节 PKMS之权限扫描
-
第六节 静默安装
-
第七节 requestPermissons源码流程解析
-
第八节 PKMS面试题
第九章 InputManagerService源码解析
- 第一节 Android Input输入事件处理流程(1)
- 第一节 Android Input输入事件处理流程(2)
- 第一节 Android Input输入事件处理流程(3)
第十章 DisplayManagerService源码解析
- 第一节 DisplayManagerService启动
- 第二节 DisplayAdapter和DisplayDevice的创建
- 第三节 DMS部分亮灭屏流程
- 第四节 亮度调节
- 第五节 Proximity Sensor灭屏原理
- 第六节 Logical Display和Physical Display配置的更新