百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

一个Android应用层开发如何转型深入Android Framework?

bigegpt 2024-09-16 12:30 10 浏览

作为一个工作了好几年的Android应用层开发者,准备在工作之余干一件事情,那就是分享一些Android系统知识,为什么决定要做这个呢,理由如下:

帮助更多人转型Android系统开发

不知何时起,单纯的Android应用层开发越来越少了,主流技术演变也越来越快,从之前的rxjava到如今的协程,从之前MVC到如今的MVVM,还有Flutter、Compose等技术,可以说是日新月异。 当我们在使用这些技术时,通常会犯一个毛病,那就是使用简单,深入困难。随便新技术,可能几天就上手了,但是没有深入理解,时间久了,就容易欠下许多技术债。

这里我提到了转到Android系统开发,也并非是一定的好方向,只是觉得可以多一条路而已,毕竟有很多相通之处。在Android系统中,涉及的知识更多,从充当基石的Linux,到各种C++库的native层,再到我们熟悉的 Framework层,还包括虚拟机、驱动等,这里关联的知识非常多,更适合个人能力提升和沉淀。

在Android应用层开发进阶

这个说起来并非易事,可能在很多人的认知里,Android开发就是主要用来实现UI和交互,但是现在小程序和混合开发大行其道,真正留给Android开发的工作量可能会越来越少。

基本方向

Android系统的架构官方经典图献上:

从下到上分别是:

  1. Linux内核:Android平台的基础是Linux内核,Android虚拟机依靠Linux内核来执行底层功能,比如线程和底层内存管理。同时基于Linux内核可以让Android系统更加稳定,并且允许设备制造商为著名的内核开发硬件驱动程序。
  2. 硬件抽象层(HAL):为特定类型的硬件提供标准的接口,比如相机和蓝牙模块,这样各个硬件厂商就可以按需开发驱动程序。
  3. Android Runtime:这个便是Java代码运行需要的虚拟机,现在一般都是ART虚拟机,ART虚拟机可以执行DEX文件来运行Java代码。
  4. 原生C/C++库(native层):许多核心Android系统组件和服务都是用C/C++代码编写,比如OpenGL ES等,而Java和Native由JNI技术打通。
  5. Java Framework层:这里就是我们经常使用的一些Java API,包括各种服务,比如AMS、WMS等,也是Android framework开发最常修改的部分。
  6. APP层:这里就是我们平时开发的APP所在的层级,这里就更侧重前面说的性能优化和各种黑科技了。

上面大致列了Android系统的层级, 这里就要对每个层级所需要的相关知识做如下列举,这些仅仅只是罗列了很少一部分,有时间之后会进行补充,想要学明白这些点都需要花费大家非常多的精力, 但现在很多人迫在眉睫想要学好学会Framework关于如何学习Android Framework开发知识,仍在迷茫的开发们可以参考整理的这份进阶文档《Android Framework 源码开发手册》,今天在这里分享给大家:

获取方法: 关注本人公众号<Android苦做舟> 或 联系作者 领取这些Android进阶开发文档

1.Android高级开发工程师必备基础技能
2.Android性能优化核心知识笔记
3.Android+音视频进阶开发面试题冲刺合集
4.Android 音视频开发入门到实战学习手册
5.Android Framework精编内核解析
6.Flutter实战进阶技术手册
7.近百个Android录播视频+音视频视频dome

1.Framework通信

进程间通信(Binder IPC机制)

  • Linux内存binder基础
  • Binder IPC通信原理
  • 深入Binder驱动
  • Binder面试总结(阿里篇)

进程内通信(Handler消息机制)

  • Loop消息泵机制
  • Message解析
  • Handler面试分享(鹅厂)

实战企业架构通信

  • LiveData事件机制

2.Framework底层服务

AMS原理

  • SystemServer加载AMS
  • AMS数据结构
  • AMS数据结构
  • Activtiy栈管理
  • 手机开机启动的AMS流程
  • App启动中的AMS流程
  • Activtiy管理
  • AMS面试集合
  • AMS原理实战

PMS原理

  • Packagelnstaller安装器流程分析
  • PMS源码解读
  • T10级面试PMS总结

WMS机制

  • WMS内核
  • Window的创建过程
  • 企业级Toast与Window架构体系
  • T10级岗位WMS面试总结

3.Framework系统资源

ServiceManager原理

  • init.rc文件启动关键服务
  • service_ manager进程入口
  • ServiceManager消息轮训
  • ServiceManager服务存储之svclist链表
  • ServiceManager面试总结

深入Contxt上下文

  • Context与ApplicationContext
  • Context族谱分析
  • Contextmp与ActivityThread
  • getActivity()与getContext ()内存区别
  • 带你认识不一样的上下文Context

深入Resource资源加载

  • resources.arsc文件
  • ResourcesManager创建Resource
  • LoadedApk与Resource关系

4.Framework事件机制

事件分发机制

  • Android事件处理的三个流程
  • 事件信号从内核到IMS过程
  • IMS如何推送数据给ViewRootimp转入上层
  • Android处理Down事件的责任链模式
  • Android处理Move事件
  • 手写模拟Android事件分发架构

事件冲突解决万能公式

  • 产生冲突事件分类
  • 产生冲突事件分类
  • 事件冲突优先级
  • 事件冲突模拟实战

5.Framework UI机制

UI绘制原理

  • setContentView加载数据的核心概念
  • ViewRootlmpl的绘制管理
  • Choreographer编舞者
  • 测量机制(onMeasure)
  • 摆放机制(onLayout)
  • T10级面试UI绘制总结

UI自定义实战

  • RecycleView
  • Webview
  • ViewPager

需要更多开发资料可以关注本人的公众号<Android苦做舟>领取这些Android进阶开发文档~

1.Android高级开发工程师必备基础技能
2.Android性能优化核心知识笔记
3.Android+音视频进阶开发面试题冲刺合集
4.Android 音视频开发入门到实战学习手册
5.Android Framework精编内核解析
6.Flutter实战进阶技术手册
7.近百个Android录播视频+音视频视频dome

相关推荐

Go语言泛型-泛型约束与实践(go1.7泛型)

来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

golang总结(golang实战教程)

基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

Go 官宣:新版 Protobuf API(go pro版本)

原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

Golang开发的一些注意事项(一)(golang入门项目)

1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

golang 托盘菜单应用及打开系统默认浏览器

之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

golang标准库每日一库之 io/ioutil

一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

文件类型更改器——GoLang 中的 CLI 工具

我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

Go (Golang) 中的 Channels 简介(golang channel长度和容量)

这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

Golang引入泛型:Go将Interface「」替换为“Any”

现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

一文带你看懂Golang最新特性(golang2.0特性)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

Golang使用grpc详解(golang gcc)

gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转golang)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...