如何把Android Framework学彻底?一条龙学习

Framework通俗易懂

平时学习 Android 开发的第一步就是去学习各种各样的 API,如 Activity,Service,Notification 等。其实这些都是 Framework 提供给我们的。Framework 层为开发应用程序提供了非常多的API,我们通过调用这些 API 构造 APP,从而满足业务上的需求。因此 Framework 其实可以简单的理解为一些 API 的库房,开发人员将一些基本功能实现,通过接口提供给上层调用。

我们可以称 Framework 层才真正是 Java 语言实现的层,在这层里定义的 API 都是用 Java 语言编写。但是又因为它包含了 JNI 的方法,JNI 用 C/C++ 编写接口,根据函数表查询调用核心库层里的底层方法,最终访问到 Linux 内核。那么Framework层的作用就有2个。

  • 用Java语言编写一些规范化的模块封装成框架,供APP层开发者调用开发出具有特殊业务的手机应用。
  • 用Java Native Interface调用core lib层的本地方法,JNI的库是在Dalvik虚拟机启动时加载进去的,Dalvik会直接去寻址这个JNI方法,然后去调用。

Framework框架包含了3个主要部分:服务端、客户端、Linux驱动。

Framework主要组成

服务端

AMS

Activity管理服务,主要是调度、启动、内存管理等。

WMS

窗口管理服务,主要是窗口、添加、启动、删除,以及分配窗口大小调节窗口叠放顺序,隐藏/显示等。

PMS

管理所有的package信息,包括安装、卸载、更新以及解析AndroidManifest.xml以组织相应的数据结构,这些数据结构将会被PMS、ActivityMangerService等等service和application使用到。

…等。

客服端

Activity

应用程序执行的一个单位与用户直接接触的类,应用程序可包含多个,称为四大组件之一。

ActivityThread

应用程序main入口类,处于主线程上,有且只有一个该类。是跟服务端沟通的桥梁。

PhoneWindow

它继承Window类,所以提供了通用窗口操作接口,内部拥有DecorView对象处理着窗口上的界面例如状态栏、标题栏、内容页面。

ViewRootImpl

是view和WindowManger沟通的协议,让它们建立联系。

WindowManager

顾名思义窗口管理类,客户端申请创建窗口,交于WindowManager然后通过跨进程通信向AMS申请。

…等。

驱动

Binder

负责跨进程通信

SufaceFlingger(简称SF)

负责界面刷新的

为什么要学习framework?

随着Android开发者越来越多,企业对Android程序员的筛选也有了更高的要求, 考察对Android底层逻辑的理解和思考就是很重要的一个方面,尤其是Android Framework中各个组件的原理。

很多公司的应用开发需要基于模块化、层次化、组件化、控件化来设计架构,它的基础就是建立在Android Framework框架的底层原理之上,学习Framework可以深层次的去解决安卓应用开始时遇到的一些难题,甚至不少公司都有设置专门的Android Framework开发岗位。

薪资岗位

现在不仅是Android开发,许多的车载等开发岗位都需要掌握framework技术。薪资方面也会有所提高,部分招聘技术要求也是必须要求。

Framework技术路线

1、系统资源

2、通信

3、事件机制

4、底层服务

5、UI机制

系统学习路线,framework全家桶资源摘要:《Framework全家桶笔记》+高清图获取

最后

Android系统建构分为四层由上到下依次是应用层,应用框架层,依赖库层,内核层,framework处于第二层,它为应用层的开发者提供基本功能,帮助开发快速构建应用程序。

对Android系统运行的机制,学习FrameWrok是必经之路,当前很多技术都是建立在对FrameWork层的了解。 例如热修复,插件化等 。

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

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

相关文章

系统数据大屏开发适配方案。

原理:通过css样式transform的属性scale实现展示盒子的缩放实现适配。 直接上干货: 监听屏幕的缩放: mounted() {this.$nextTick(() > {this.changeScale()})window.addEventListener(resize, this.changeScale); //监听屏幕的缩放},be…

约瑟夫环实现

约瑟夫环 约瑟夫环小游戏:把小朋友按照编号1,2,3,…,n围成一圈,指定编号为k的小朋友从1开始报数,数到m的小朋友出队。接着他的下一位小朋友再次从1报数,以此类推,直到所有…

计算机毕业设计 基于SSM的问卷调查管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

uniApp常见面试题-附详细答案

uniApp中如何进行页面跳转? 答案:可以使用uni.navigateTo、uni.redirectTo和uni.reLaunch等方法进行页面跳转。其中,uni.navigateTo可以实现页面的普通跳转,uni.redirectTo可以实现页面的重定向跳转,uni.reLaunch可以实…

qt day 5

实现局域网的网络聊天室功能 1>服务器代码 --------------------------------------------------------------- widget.h --------------------------------------------------------------- #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMes…

golang入门笔记——nginx

文章目录 Nginx介绍Nginx的安装Nginx文件Nginx反向代理负载均衡nginx动静分离URLRewrite防盗链nginx高可用配置安全性Nginx限流Nginx缓存集成Lua脚本OpenRestry Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占用内存少&#xff0c;并发能力强&#x…

52、基于函数式方式开发 Spring WebFlux 应用

★ Spring WebFlux的两种开发方式 1. 采用类似于Spring MVC的注解的方式来开发。此时开发时感觉Spring MVC差异不大&#xff0c;但底层依然是反应式API。2. 使用函数式编程来开发★ 使用函数式方式开发Web Flux 使用函数式开发WebFlux时需要开发两个组件&#xff1a; ▲ Han…

一.使用qt creator 设计显示GUI

一.安装qt creator 二.创建项目 文件-》新建项目 三.使用设计 可以直接使用鼠标拖拽 四.转换为py文件 # from123.py 为导出 py文件的文件名 form.ui 为 qt creator创造的 ui 文件 pyuic5 -o x:\xxx\from123.py form.ui五.显示GUI from PyQt5.QtWidgets import * fr…

Android高通 8.1 老化apk打开摄像头花屏问题

1、最近由于公司VR 3D系统要做双Camera老化测试apk&#xff0c;同时老化4小时需要轮询切换二个摄像头&#xff0c;保证后面camera标定精度数据更准确。 2、一开始我尝试用之前方案移植过去然后同时打开双摄像头 突然发现花屏 如下图所示 3、于是一第一时间想到是不是分辨率不兼…

在UI设计中用什么样的字体?优漫动游

在windos下支持的字体 在UI设计中用什么样的字体&#xff1f; 宋体&#xff08;simsun&#xff09;&#xff1a;在win下大部分的浏览器是默认的&#xff0c;适合小字号&#xff0c;不太适合大字号。 微软雅黑&#xff1a;是目前win浏览器中最值得使用的。 Arial&#…

算法通关村——滑动窗口高频问题

1. 无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 1.1 滑动窗口 找到最长字串需要找到字串的首尾位置…

c++保留n位小数输出(百分数形式,保留n位有效数字,设置宽度)

在C中&#xff0c;你可以使用 头文件中的一些函数和控制符来控制输出的小数位数、百分数形式以及设置宽度。下面我将详细讲解如何实现这些功能。 控制小数位数 若要在输出中控制小数位数&#xff0c;你可以使用 std::setprecision 函数。这个函数接受一个整数参数&#xff0c…

多组背包恰好装满方案数

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 现在有一个大小n*1的收纳盒&#xff0c;我们手里有无数个大小为1*1和2*1的小方块&#xff0c;我们需要用这些方块填满收纳盒&#xff0c;请问我们有多少种不同的方法填满这个收纳盒 分析&…

关于 Unity 连接 MuMu 模拟器上的 Unity Remote 5 的方法

在使用 Unity 开发 Android 的过程中&#xff0c;可以通过使用 Unity Remote 这个 app 来和真机连接&#xff0c;进而在真实环境下进行测试性能等工作&#xff0c;而本次则是由于其他问题引出的一个小坑&#xff0c;记录以备后续查询。 这次是由于在自学过程中遇到的一个工程&…

MyBatisPlus枚举类最佳实践(非常典型和高效的枚举类写法)

目录 1、MyBatisPlus枚举类最佳实践 2、枚举类的作用及问题 3、MyBatisPlus注解实现枚举最佳实践 4、简单来说 5、下面我们看一个使用上述注解的完整枚举类示例: &#xff08;1&#xff09;枚举类&#xff1a; &#xff08;2&#xff09;DTO类&#xff1a; 6、根据上面…

Python - 队列【queue】task_done()和join()基本使用

一. 前言 task_done()是Python中queue模块提供的方法&#xff0c;用于通知队列管理器&#xff0c;已经处理完了队列中的一个项目。 queue.task_done()是Queue对象的一个方法&#xff0c;它用于通知Queue对象&#xff0c;队列中的某一项已经被处理完毕。通常在使用Queue对象时…

异步编程 - 13 高性能线程间消息传递库 Disruptor

文章目录 Disruptor概述Disruptor中的核心术语Disruptor 流程图 Disruptor的特性详解基于Disruptor实现异步编程 Disruptor概述 Disruptor是一个高性能的线程间消息传递库&#xff0c;它源于LMAX对并发性、性能和非阻塞算法的研究&#xff0c;如今构成了其Exchange基础架构的核…

探究IP路由的工作原理与路由表查找规则

文章目录 一、定义二、IP连通的前提三、路由表1. 作用2. 路由表字段内容3. 路由表查表规则4. 路由信息的来源5. 路由表写表规则6. 路由优先级 四、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、定义 路由器是网络中负责将数据报文在不同IP网段…

git在linux情况下设置git 命令高亮

只需要执行下面这个命令&#xff0c;这样就可以在查看git status明亮的时候高亮显示。 git config --global color.status auto未设置前 谁知之后

linux中常见服务端安装

linux安装服务脚本 1、yum安装 # 通过apt安装yum apt install yum # yum安装软件 yum install pam-devel # yum 卸载 yum remove pam-devel2、rpm安装 # 安装 rpm -i example.rpm #安装 example.rpm 包&#xff1b; rpm -iv example.rpm #安装 example.rpm 包并在安装过程…