什么是Android FrameWork,请你介绍一下?

news2024/12/30 20:03:22

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 的中的知识点还有很多,如:

  1. Activity 生命周期:管理 Android 应用程序中 Activity 的创建、销毁、暂停、恢复等状态,确保应用程序可以正确地响应用户操作。
  2. Fragment:允许在一个 Activity 中组合多个 UI 组件布局,支持灵活的 UI 布局。
  3. Service:允许在后台执行长时间的任务或操作,如播放音乐、检查邮件等。
  4. BroadcastReceiver:监听系统广播和自定义广播,当有广播消息发送时,负责接收处理。
  5. ContentProvider:管理应用程序中的数据,提供数据存储和访问服务,实现多个应用程序数据的共享。
  6. Intent:在应用程序之间传递消息和数据,启动其他应用程序的组件,如 Activity、Service 和 BroadcastReceiver。
  7. AndroidManifest.xml 文件:存储应用程序的基本信息和配置,包括应用程序的名称、版本、权限等。
  8. R.java 文件:一个由 Android 自动生成的类,用于访问应用程序中的资源标识符,如布局、字符串、图像等。
  9. 权限管理:确保应用程序只能访问其被授权访问的数据和系统功能,防止应用程序损坏或滥用设备。
  10. 系统服务:提供各种共享系统级别的功能和服务,如网络访问服务、通知提示服务、存储管理服务等。
  11. View 和 ViewGroup:Android 中的 UI 控件基本单元,用于构建应用程序的界面和用户交互。
  12. 状态保存与恢复:当应用程序被暂停或恢复时,负责保存和恢复应用程序的状态和数据。
  13. 资源管理:管理应用程序的资源,如图片、布局、字符串等,确保资源文件可以被动态加载、修改和卸载。
  14. 事件处理:处理用户的各种输入事件,如触碰屏幕、按键事件等,响应用户的操作。
  15. 多线程编程:允许应用程序在多个线程中执行任务,充分利用硬件资源,提高应用程序的性能和响应速度。
  16. 安全性管理:确保应用程序可以正常运行,并保护用户的数据和设备不受外界威胁和攻击。
  17. 动画:增加用户体验和可视性,使应用程序更具生动性和吸引力。
  18. 自定义视图:扩展应用程序的 UI 功能,实现复杂的 UI 效果和流畅度。
  19. 通知与推送:向用户提供通知和推送消息,提升用户对应用程序的关注度和使用体验。
  20. 调试与测试:确保应用程序的稳定性和正确性,降低应用程序出现问题的风险。
  21. ……

所以为了帮助到大家更好的了解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 :

  1. Android系统的启动过程及Zygote的启动过程
  2. 应用进程的启动过程

AMS源码分析 :

  1. Activity生命周期管理
  2. onActivityResult执行过程
  3. 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

  1. 开机Init 进程
  2. 开机启动 Zygote 进程
  3. 开机启动 SystemServer 进程
  4. Binder 驱动
  5. AMS 的启动过程
  6. PMS 的启动过程
  7. Launcher 的启动过程
  8. Android 四大组件
  9. Android 系统服务 - Input 事件的分发过程
  10. Android 底层渲染 - 屏幕刷新机制源码分析
  11. Android 源码分析实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zabbix报警配置

一、前言 这里用的是zabbix6.0LTS版本,这里记录自定义配置报警,因为邮件报警基本已经很少有人使用了,大部分是,短信、飞书、钉钉等等工具,所有需要定制化报警 二、定义脚本存放路径 cd /usr/local/zabbix/etc[rootn…

MODBUS 转 EtherNet/IP 网关连接希望森兰变频器案例

Modbus转Ethernet/Ip网关,用于将多个 MODBUS 从站设备接入 ETHERNET/IP 主站网络,实现 MODBUS 转 ETHERNET/IP 功能。配上 MODBUS 转 EtherNet 网关专用的 EDS 文件,实现 ETHERNET/IP 主 站对 MODBUS 从站设备的控制。 需要设备 .24v电源模块 罗克韦尔PL…

【城市污水处理过程中典型异常工况智能识别】(基于迁移学习,拓扑结构卷积神经网络的污水异常工况识别)

基于迁移学习拓扑结构卷积神经网络的污水异常工况识别 **摘 要:针对城市污水处理过程的异常工况识别问题,本文提出了基于图像纹理性分析的工况识别方法。首先总结了几种典型的异常工况的特点,并且分析了卷积神经网络特征提取异常工况的几种纹…

月薪20k的性能测试必备技能:发现性能瓶颈掌握性能调优

背景 当下云计算、大数据盛行的背景下,大并发和大吞吐量的需求已经是摆在企业面前的问题了,其中网络的性能要求尤为关键,除了软件本身需要考虑到性能方面的要求,一些硬件上面的优化也是必不可少的。 作为一名测试工作者&#xf…

ubuntu将主文件夹的文件夹中文名称改为英文

许多人在使用ubuntu时使用汉语的,但是主文件夹下的文件夹也随之变成了中文,导致命令行下输入文件夹名称非常的困难,那么怎么简单的把名字改成英文的呢?(也不知道哪个版本开始不出现下面这个图示提示了) 方法…

Vue2-黑马(十二)

目录: (1)vue2-登录-store-user.js (2)实战-登录-store-user.js (3)登录-实战--permission.js-获取角色 (1)vue2-登录-store-user.js 我们进入store中的actions查看它…

MySQL - 基于SSL安全连接的主从复制

目录 🍁主从复制的原理 🍁部署master 🍁部署slave 🍁测试SSL主从复制 🦐博客主页:大虾好吃吗的博客 🦐MySQL专栏:MySQL专栏地址 生产环境中一台mysql主机存在单点故障,所…

c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩

c/c:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人&#x…

【从零开始学Skynet】实战篇《球球大作战》(十一):测试登录流程

终于可以测试work协议了。只要走得通,就代表完成了整套底层框架。 1、主服务修改 我们重新修改主服务,让它智能一些,根据配置文件自动开启服务,无须手动设置。如下代码所示: local skynet require "skynet"…

Linux应用编程(信号基础)

一、基本概念 信号是事件发生时对进程的通知机制,也可以把它称为软件中断。信号与硬件中断的相似之处在于能够打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟。大多数情况下,是无法预测信号达到的准确时间,…

录屏剪辑软件哪个好 录屏后怎么剪辑视频

​ 现在很多人都会通过录屏的方式来传播分享内容,但是很多录屏软件的操作不太方便,给录制带来困难。再加上很多视频在录制后需要剪辑,加大了视频制作的工作量,所以找到一款好用的录屏剪辑软件很重要。今天就来分享一下录屏剪辑软件…

从0-1优化C++类对象创建资源消耗 (附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、C++几种常用的函数是什么?二、优化过程1.源代码2.源代码总结前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于…

Spring MVC 配置(10)

目录 简介: 传统方式: 纯注解方式 1. Tomcat加载Servlet 2. 参数分析 3. 调用onStartup方法 注解方法替换配置的 xml 文件 简介: Spring MVC是Spring的一个子模块,也是我分析的Spring源码的最后一个模块。下面看一下Spring …

2023年安全岗面试题及经验分享

如果你正在面试安全岗,那么恭喜你及时看到了这篇文章~ 写在前面 本篇为大家整理了上百道网络安全面试题,主要方向有 网络基础、渗透测试、安全工具 等,其中还包括 HVV面试、CISP备考 等,希望在求职期可以帮到大家​!…

WAF绕过信息收集

WAF绕过-信息收集之反爬虫延时代理池技术 思维导图 WAF拦截会出现在安全测试的各个层面,掌握各个层面的分析和绕过技术最为关键。 webpathbrute工具 一个Web目录扫描暴力探测工具 WebPathBrute-Web路径暴力探测工具下载:https://github.com/7kbstorm…

QN88封装国产FPGA

QN88GW1N-9管脚名GW2A-18管脚名AL3S10EG4S201VCCVCCIO_L1_1VCC_12VSSVSSIO_L2_1IO_L1_13IOL2AVCCO7IO_L3_1,MOSI,D1IO_L2_14IOL5A/JTAGSEL_N/LPLL_T_inIOL7A/LPLL1_T_inIO_L4_1IO_L1N_15IOL11A/TMSIOR25B/TMSIO_L5_1,SPICSNIO_L1P_16IOL11B/TCKIOR26A/TCKINITNGND7IOL12B/TDIIO…

爬虫日常练习-selenium登录12306

文章目录前言页面分析代码设计前言 hello,好兄弟们。经过前面几篇文章后,想必小伙伴们对于简单的网页文本爬取,图片爬取类的内容已经熟练掌握了。今天我们开始练习一个新的内容:selenium。有关这一块的基础知识网上太多了&#x…

Java面试题总结 | Java面试题总结4-多线程模块(持续更新)

多线程 线程互斥和线程同步 线程互斥:当多个线程需要访问同一资源时,要求在一个时间段内只能允许一个线程来操作共享资源,操作完毕后别的线程才能读取该资源,这叫线程的互斥。我们需要使用synchronized来给共享区域加锁&#xf…

腾讯云服务器CVM标准型S5和S4的区别

腾讯云服务器CVM标准型S5和S4有什么区别?标准型S5云服务器次新一代的云服务器,CPU采用2.5GHz主频的Intel Xeon Cascade Lake 或者 Intel Xeon Cooper Lake 处理器,睿频3.1GHz,目前标准型S5云服务器活动比较多,标准型S4…

Android 10.0 系统systemui下拉通知栏的通知布局相关源码分析

1.前言 在android10.0的系统rom开发中,在进行systemui中的下拉通知栏的布局自定义的时候,对于原生systemui的 系统的下拉通知栏的通知布局的了解也是非常重要的,接下来就来分析下相关的下拉通知栏的通知布局的相关 源码流程,了解这些才方便对通知栏的布局做修改 2.系统…