Framework是什么
Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Framework都会隐藏main函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上。
Android Framework
Android Framework建立在顶层应用与C/C++库之间,主要由三部分组成:服务端、客户端、Linux驱动。它们的主要内容如下图所示:
APK程序的运行过程
APK程序的运行流程大概如下图所示:
需要重点说明的是,ActivityThread是一个类,实例所在线程即为UI主线程,main方法就在ActivityThread类里面,是安卓应用程序的入口。ActivityThread对象在创建之前调用的prepareMainLooper()方法会实例一个Looper对象,该Looper对象会创建一个消息队列,调用loop()方法后,UI线程会进入消息循环体,不断从消息队列里抽取消息并处理。ActivityThread的执行流程里面并没有主动创建一个Activity,而是同通过创建一个ApplicationThread的Binder监听来自远方AmS的IPC调用,在收到创建Activity消息时才开始创建一个主Activity。创建Activity的具体流程如下:
值得注意的是,W类继承Binder类,它负责接收来自WmS的IPC调用,并将消息发送至DectorView,如果DectorView没有处理,则传递给PhoneWindow,如果PhoneWindow没有处理,则继续传递给Activity,Activity通过Handler来处理此消息。
总结如下:一个安卓应用程序在运行之初总共会创建三个线程:ActivityThread、ApplicationThread、W。其中ActivityThread为UI线程,通过绑定一个Looper不断抽取消息并处理,ApplicationThread与W均为Binder类,负责与远方服务器端通信,ApplicationThread在主Activity创建之前创建,负责监听AmS传来的创建Activity消息,在Activity创建完毕后,W负责监听WmS发来的消息,并将此消息传给Activity。
服务器端
设计服务器端是为了给在安卓机上运行的众多顶层应用提供一个全局服务,主要由WmS与AmS构成,其中WmS主要负责监听与处理与窗口相关的事件(如监听用户点击、手势),AmS主要负责管理Activity(如创建Activity)。当用户在安卓机上触发一个事件时,服务端会首先获取这一事件,如果发现此事件属于某一运行中的应用程序则利用Binder机制将其发送给此应用程序处理。
WmS主要由两个类组成:KeyQ类、InputDispatcherThread类。这两个分别创建一个线程,KeyQ类负责不断将用户消息存储到QueueEvent消息队列中,InputDispatcherThread负责不断从QueueEvent中取出消息进行处理或分发给相应应用。
像 Android Framework 的中的知识点还有很多,如:
- Activity 生命周期:管理 Android 应用程序中 Activity 的创建、销毁、暂停、恢复等状态,确保应用程序可以正确地响应用户操作。
- Fragment:允许在一个 Activity 中组合多个 UI 组件布局,支持灵活的 UI 布局。
- Service:允许在后台执行长时间的任务或操作,如播放音乐、检查邮件等。
- BroadcastReceiver:监听系统广播和自定义广播,当有广播消息发送时,负责接收处理。
- ContentProvider:管理应用程序中的数据,提供数据存储和访问服务,实现多个应用程序数据的共享。
- Intent:在应用程序之间传递消息和数据,启动其他应用程序的组件,如 Activity、Service 和 BroadcastReceiver。
- AndroidManifest.xml 文件:存储应用程序的基本信息和配置,包括应用程序的名称、版本、权限等。
- R.java 文件:一个由 Android 自动生成的类,用于访问应用程序中的资源标识符,如布局、字符串、图像等。
- 权限管理:确保应用程序只能访问其被授权访问的数据和系统功能,防止应用程序损坏或滥用设备。
- 系统服务:提供各种共享系统级别的功能和服务,如网络访问服务、通知提示服务、存储管理服务等。
- View 和 ViewGroup:Android 中的 UI 控件基本单元,用于构建应用程序的界面和用户交互。
- 状态保存与恢复:当应用程序被暂停或恢复时,负责保存和恢复应用程序的状态和数据。
- 资源管理:管理应用程序的资源,如图片、布局、字符串等,确保资源文件可以被动态加载、修改和卸载。
- 事件处理:处理用户的各种输入事件,如触碰屏幕、按键事件等,响应用户的操作。
- 多线程编程:允许应用程序在多个线程中执行任务,充分利用硬件资源,提高应用程序的性能和响应速度。
- 安全性管理:确保应用程序可以正常运行,并保护用户的数据和设备不受外界威胁和攻击。
- 动画:增加用户体验和可视性,使应用程序更具生动性和吸引力。
- 自定义视图:扩展应用程序的 UI 功能,实现复杂的 UI 效果和流畅度。
- 通知与推送:向用户提供通知和推送消息,提升用户对应用程序的关注度和使用体验。
- 调试与测试:确保应用程序的稳定性和正确性,降低应用程序出现问题的风险。
- ……
所以为了帮助到大家更好的了解Android Framework框架中的知识点,这边查阅大量的素材,整理了一下的 Android Framework 核心知识点手册,里面记录了:有Handler、Binder、AMS、WMS、PMS、事件分发机制、UI绘制……等等,几乎把更Framework相关的知识点全都记录在册了
《Framework 核心知识点汇总手册》:https://qr18.cn/AQpN4J
Handler 机制实现原理部分:
1.宏观理论分析与Message源码分析
2.MessageQueue的源码分析
3.Looper的源码分析
4.handler的源码分析
5.总结
Binder 原理:
1.学习Binder前必须要了解的知识点
2.ServiceManager中的Binder机制
3.系统服务的注册过程
4.ServiceManager的启动过程
5.系统服务的获取过程
6.Java Binder的初始化
7.Java Binder中系统服务的注册过程
Zygote :
- Android系统的启动过程及Zygote的启动过程
- 应用进程的启动过程
AMS源码分析 :
- Activity生命周期管理
- onActivityResult执行过程
- AMS中Activity栈管理详解
深入PMS源码:
1.PMS的启动过程和执行流程
2.APK的安装和卸载源码分析
3.PMS中intent-filter的匹配架构
WMS:
1.WMS的诞生
2.WMS的重要成员和Window的添加过程
3.Window的删除过程
《Android Framework学习手册》:https://qr18.cn/AQpN4J
- 开机Init 进程
- 开机启动 Zygote 进程
- 开机启动 SystemServer 进程
- Binder 驱动
- AMS 的启动过程
- PMS 的启动过程
- Launcher 的启动过程
- Android 四大组件
- Android 系统服务 - Input 事件的分发过程
- Android 底层渲染 - 屏幕刷新机制源码分析
- Android 源码分析实战