导图社区 Android学习路线
这是一篇关于Android学习路线的思维导图,包含设计思想与代码质量优化、Android性能调优、华为鸿蒙系统等。
编辑于2023-11-13 23:52:22中心主题
设计思想与代码质量优化
六大原则
单一原则
开闭原则
里氏替换原则
依赖倒置原则
接口隔离原则
迪米特法则
设计模式
结构型模式
桥接模式
适配器模式
装饰器模式
代理模式
外观模式
组合模式
享元模式
创建型模式
建造者模式
单例模式
抽象工厂模式
工厂方法模式
原型模式
行为型模式
模板方法模式
策略模式
观察者模式
责任链模式
命令模式
访问者模式
迭代器(游标)模式
备忘录模式
状态模式
中介者模式
解释器模式
实战设计模式解耦项目网络层框架
数据结构
线性表ArrayList
链表LinkedList
栈Stack
队列
Queue
Deque
阻塞队列
树Tree
平衡二叉树
红黑树
映射表
HashTable
HashMap
SparseArray
ArrayMap
算法
排序算法
冒泡排序
选择排序
插入排序
快速排序
堆排序
基数排序
查找算法
折半查找
二分查找
树型查找
Hash查找
必备技能Java
深入Java泛型
泛型的作用与定义
通配符与嵌套
泛型上下边界
RxJava中泛型的使用与分析
JSON解析泛型与Bean强转原理实践
注解深入浅出
自定义注解
自定义注解与元注解
注解参数与默认值
注解的使用
APT,编译时注解处理器
插装,编译后处理筛选
反射,运行时动态获取注解信息
Retrofit中的注解原理项目实战
自定义注解实现ButterKnife项目架构实战
并发编程
线程共享和协作
CPU核心数,线程数,时间片轮转机制解读
synchronized,lock,volatile,ThreadLocal如何实现线程共享
wait\notify\notifyAll\join方法如何实现线程间协作
线程的深入理解
线程的生命周期
死锁和更多的并发安全
ThreadLocal深入理解
站在巨人肩上操作CAS
CAS的原理
CAS带来的3大问题
原子操作类的正确使用实战
只会线程还不够
组赛队列
线程池底层实现原理分析
线程池排队机制
手写线程池实战
Executor框架解读实战
深入并发原理和大厂面试
AQS解析
JMM
volatile和synchronized
面试问题
Android AsynTask原理解析
数据传输与序列化
serializable原理
Parcelable接口原理解析
JSON
Adapter设计模式
JSON解析基本原理
xml
Java虚拟机原理
垃圾回收机制
对象存活及强弱引用辨析
GC算法:标记-清除、复制、标记-整理算法与分代回收
可达性分析与引用计数
解读GC日志
从底层深入理解运行时数据区
内存分配策略
JVM栈帧及方法调用详情
JMM,Java Memory Model
Dalvik\ART虚拟机
基于寄存器的虚拟机
Dalvik与ART的区别
ART程序安装与运行机制
反射与类加载
反射基本概念与Class
三种获取Class对象的方式
获取构造器实例化对象与属性信息
包信息和方法
Hook技术动态编程
ClassLoader类加载器
动态代理模式
Android Davilk与ART
PathClassLoader、DexClassLoader与BootClassLoader
双亲委托机制
热修复类加载项目实战
动态代理
动态代理基本原理
动态代理之RxJava/Retrofit应用实战
高效IO
Java IO体系
装饰着模式
InputStream 和 OutputStream
File 文件操作
FileChannel
内存映射
IO操作Dex文件加密、apk加固项目实战
Kotlin
Kotlin基础
变量、语句、函数
匿名函数、Lambda
3阶段
Kotlin进阶
Kotlin实战
Android高级UI和FrameWork
高级UI
ViewGroup
高级UI基础
坐标系、角度(弧度)、颜色
View与ViewGroup绘制原理解析
绘制流程
MeasureSpec
LayoutParams
事件分发机制
自定义View实战
Canvas与paint机制
Canvas绘制点、线、面、几何图形
Canvas画布与图层
Path、PathMeasure、Matrix与贝塞尔曲线
文字&动画
文字绘制
视图动画与属性动画
事件分发
MotionEvent和多点触控
手势(GestureDetector ScaleGestureDetector)
RecycleView实现吸顶效果
自定义ItemDecoration与LayoutManager
ViewHolder与回收复用机制
布局管理器LayoutManager
RecycleView原理解析
自定义Banner
ViewPager
加载机制与优化
与fragment结合
ViewPager2原理解析
布局ViewGroup原理解析
ConstraintLayout
LinearLayout
RelativeLayout
FrameLayout
GridLayout
Material Design设计的APP
Material Design 常用控件
Toolbar
FloatingActionButton
Snackbar
CoordinatorLayout
CoordinatorLayout原理解析
* 自定义Behavior
AppbarLayout
NavigationView、BootNavigationView BottomSheet
DrawLayout
CardView
CollapsingToolbarLayout
NestScrollView原理解析
自定义TabLayout
WebView交互架构项目实战
使用与原理
Js与Java交互
多线程WebView的使用实践
WebView与Native的通信架构手写实践
网易插件化换肤
LayoutInflater加载布局分析
Android资源的加载机制
Resource与AssetManager
Android架构组件JetPack
LiveData原理
Navigation如何解决tabLayout问题
ViewModel如何感知view生命周期及内核原理
Room架构方式
dataBinding为什么能够支持MVVM
WorkManager内核揭秘
Lifecycles生命周期
Paging使用原理与设计模式
Hilt依赖注入原理与实战
基于MVVM架构利用jetpack构建的音乐播放器
MVVM架构
liveData
ViewModel
Navigation
Lifecycle
viewPager2
Room
rxjava+retrofit
FrameWork
Binder
Linux预备知识
进程隔离
进程空间划分-用户空间\内核空间
系统调用-用户态\内核态
Linux的IPC机制
内存共享
Socket\管道\消息队列\信号量
Binder
传统的Linux中IPC通信原理--copy_from_user/copy_to_user
Binder IPC通信原理
Binder跨进程通信原理
动态内核加载模块
内存映射mmap原理解析
Binder IPC实现原理
Binder通信模型
Client/Server/ServiceManager/驱动
Binder Driver浅析
Binder线程池
启动ServerManager
获取ServerManager
注册服务(addService)
获取服务(addService)
Binder通信中的代理模式
Binder Java 层实现
Binder 面试总结
Handler消息机制
Linux的epoll机制
一个线程有几个Handler
一个线程有几个Looper?如何保证?
子线程可以创建Handler吗?
多个Handler往MessageQueue中添加数据,内部如何确保线程安全?
loop.loop()为什么不会阻塞主线程
Message的数据结构是什么样子
Handler内存泄漏场景有哪些,如何避免?
IntentService源码解析
HandlerThread源码解析
Dalvik VM进程系统
zygote基础
分析zygote的启动过程
启动SystemServer进程
启动各种系统服务
应用程序进程?应用程序如何启动
创建应用程序
启动线程池
创建消息循环
增量更新项目实战
dex文件结构
dex文件的加载原理
dex文件差分包生成
深入理解WMS
Window的创建过程
Dialog与Toast源码解析
Activity、View、Window之间的关系
从WMS角度分析Activity的启动流程
WMS
Window的添加过程
Window的删除过程
深入理解PackageManager Service
APP安装流程分析
APP解析流程
Manifest清单文件的价值
PMS面试总结
深入理解AMS
AMS的启动过程
AMS的重要数据结构
ActivityRecord
TaskRecord
ActivityStack
Activity栈管理
Activity任务栈模型
Launch Mode
Intent的Flag与taskAffinity
Activity 的启动流程
Hook实现启动未注册的Activity
Activity的管理
Activity的运行机制
adj内存管理机制
Activity内存管理方案
Android组件内核
Activity与调用栈
四大启动模式与IntentFlag
APK启动流程与ActivityThread解析
Activity生命周期源码解析
实战Splash广告载入与延时跳转
Fragment的管理与内核
Fragment事务管理机制
Fragment转场动画
嵌套处理,ChildFragmentManager
Service内核原理
start与bind区别与原理
自带工作线程的IntentService
前台服务与Notify
组件间通信方案
Activity与Fragment低耦通信设计
Android与Service通信
Intent数据传输限制
ViewModel通信方案
EventBus源码解析
实战:自动感知生命周期事件总线LiveDataBus
数据持久化
Android文件系统
sdcard与内部存储
轻量级kv持久化
SharePreference原理
微信MMKV原理与实现
MMAP内存映射
文件数据结构
增量更新与全量更新
多进程设计
嵌入式Sqlite数据库
SqliteOpenHelper
sqlite升级与数据迁移方案
实战注解ORM数据库框架
实战
腾讯新闻客户端
Android性能调优
程序性能优化
OOM问题原理解析
adj内存管理机制
JVM内存回收机制与GC算法解析
生命周期相关问题总结
Bitmap压缩方案总结
ANR问题解析
AMS系统时间调节原理
程序等待原理分析
ANR问题解决方案
Crash监控方案
Java层监控方案
Native层监控方案
启动速度与执行效率优化项目实战
冷热启动耗时检查与分析
启动黑白屏解决
卡顿分析
stickMode严苛模式
Systrace与TraceView工具
Android Studio Profile
布局检测与优化
布局层级优化
过度渲染与检测
Hierarchy View 与 Layout Inspactor 工具
内存优化
内存抖动与内存泄漏
内存大户,Bitmap内存优化
Profile内存监测工具
Mat大对象与泄漏检测
耗电优化
Doze&Standby
Battery Historian
JobScheduler、WorkManager
网络传输与数据存储优化
Google序列化工具protobuf
7z极限压缩
使用web图片
apk大小优化
APK瘦身
微信资源混淆原理
屏幕适配
屏幕适配方案总结
Hook技术实现屏幕完全适配
APM性能监控
内存监控
JVMTI工作机制
类加载器如何加载so
MMAP完成高效日志记录
动态内存分配与GC监控
卡顿监控
Looper机制监控方案
Choreographer监控方案
Matrix无入侵埋点监控函数耗时
ANR监控
开发效率优化
分布式版本控制系统Git
自动化构建系统Gradle
Groovy基础
Groovy开发环境搭建
Groovy变量与字符串
Groovy接口与闭包
常用数据结构
面向对象
JSON与XML解析
文件操作
Gradle与Android插件
Gradle是什么
Gradle生命周期
Project与Task
Transfrom API
Transform执行机制与配置
字节码增强技术
修改无源码第三方SDK代码(BUG)
自定义插件开发
build script脚本
buildsrc目录
独立项目开发插件
上传本地仓与jcenter仓库
Artifactory私服仓库搭建
插件实战
自动化加固插件
AOP编程字节码插桩
多渠道打包
发版本自动钉钉
实战项目:全方位评测与解析腾讯新闻客户端
解读开源框架思想
热修复设计
AOT\JIT、dexopt与dex2oat
CLASS_ISPREVERIFIED问题与解决
Android N 混编对热修复的影响
即时生效与重启生效热修复原理
Gradle自动补丁包生成
手写热修复架构
热修复面试总结
插件化框架
Class文件加载Dex原理
Android资源加载与管理
自大组件的加载与管理
so库的加载原理
Android系统服务的运行原理
手写插件化框架
面试总结
组件化框架
组件化之集中式路由
阿里巴巴ARouter原理
APT技术自动生成代码与动态类加载
java sp机制实现组件服务调用
拦截器AOP编程(跳转前预处理-登录),路由参数传递与IOC注入
手写组件化式路由
面试总结
图片加载框架
图片加载框架选型
Universal Image Loader、Glide、Picasso、Fresco
Glide
Picasso
Fresco
Glide原理分析
Fragment感知生命周期原理
自动图标大小计算
图标解码
优先级请求队列
ModelLoader 与 Registry机制
内存缓存原理
LRU内存缓存
引用计数与弱引用活跃缓存
Bitmap复用池
缓存大小配置
磁盘文件缓存
原始图形文件缓存
解码图形文件缓存
手写图片加载框架
网络访问框架
网络通信必备知识
Restful URL
HTTP协议&TCP/IP协议
SSL握手与加密
DNS
DNS解析
HTTPDNS
Socket通信
Socks代理
HTTP代理与隧道代理
OkHttp源码解读
Socket连接池复用机制
HTTP协议重定向与缓存处理
高并发请求队列:任务分发
责任链模式与拦截器设计
Retrofit源码解读
手写高性能网络通讯框架
BAT网络面试模拟测试
RXJava响应式编程框架设计
链式调用
扩展的观察者模式
事件变换设计
Scheduler线程控制
每周比别人多花6个小时,知道别人不知道的底层技术
架构师炼成实战
架构设计
MVP、MVP与MVVM
模块化与组件化架构
网上商城项目实战
新闻客户端项目实战
多格式播放器项目实战
Gradle自动化项目实战
NDK开发
NDK基础知识体系
C与C++
数据类型
内存结构与管理
预处理指令、Typedef别名
结构体与共用体
指针、智能指针、方法指针
线程
类
函数、虚函数、纯虚函数与析构函数
初始化列表
JNI开发
静态与动态注册
方法签名、与Java通信
本地引用与全局引用
Native开发工具
编译器、打包工具与分析器
静态库与动态库
CPU架构与注意事项
构建脚本与构建工具
Cmake
Makefile
交叉编译移植
FFmpeg交叉编译
x264、FAAC交叉编译
解决所有移植问题
AS构建NDK项目
Linux编程
Linux环境搭建、系统管理、权限系统、工具使用
Shell脚本编程
底层图片处理
png\jpeg\webp图像处理与压缩
微信图标压缩
源码都在用的giflib:GIF合成原理与实现
音视频开发
直播APP(用户端与主播端)
多媒体系统
Camera与手机屏幕采集
CameraX摄像头数据提取
图像原始数据格式YUV420(NV21与YV12等)
音频采集与播放系统
编码器MediaCodec
MediaMuxer复用与MediaExtractor
FFmpeg
ffmpeg模块介绍
音视频解码,音视频同步
I帧,B帧,P帧解码原理
x264视频编码与faac音频编码
NativeWindow绘制
流媒体协议
RTMP协议
音视频通话P2P WebRTC
openVC
图像预处理
灰度化、二值化
模糊、高斯模糊
图像形态学操作:腐蚀、膨胀与开闭操作
轮廓查找
人脸检测
haar模型
IBP特征提取
物体检测模型训练
身份证识别
车牌号识别
车牌定位:sobel因子与hsv颜色模型定位
SVM分类候选车牌评分
人工神经网络模型训练与车牌字符识别
抖音APP
OpenGL与EGL
Android OpenGL ES OES 扩展纹理处理摄像头数据
OpenGL ES FBO 帧数据缓存
Seetaface2 人脸关键点定位
视觉效果处理
视觉效果处理:双分屏、三分屏、四分屏
滤镜层责任链设计
音视频变速原理
智能家居串口编程实战
Flutter
flutter语言基础与原理
介绍
原生开发与跨平台技术
what is flutter
flutter开发环境搭建
flutter编程语言Dart
一切皆对象,Dart面向对象的原理解析
Dart中的变量、函数、操作符、异常语法与Java原理对比
类的机制
初始化列表规则
命名构造方法
常量构造方法
Mixin
flutter框架原理与使用技巧
常用widget
常用布局
如何自定义view
动画\手势交互
flutter框架与原生框架的交互
flutter进阶
flutter FrameWork
flutter启动引擎
TaskRunner工作原理
Dart虚拟机
Widget架构
flutter应用启动分析
flutter消息机制
flutter的platform channel原理
flutter异步Future机制
flutter动画原理
flutter渲染机制
flutter混合栈开发
flutter状态管理
flutter2.0新特性
flutter性能监控
flutter引擎分析
flutter项目实战
微信小程序
小程序介绍
背景与趋势
小程序技术方案
公众平台注册机配置
开发工具的使用
MINA框架架构剖析
应用程序配置详情
逻辑与界面分离架构
单向数据流
UI开发
复查的页面布局
文字图片等内容的呈现
用户交互表单开发
对话框等交互元素
下拉刷新和上拉加载
图形与动画操作
页面之间的跳转过度
用户界面事件处理
API操作
背景与趋势
多媒体操作
网络通信
本地存储及文件操作
地理位置信息
社保信息获取
系统功能的使用(扫码、打电话)
界面交互操作
微信对接
微信登录
用户信息获取
微信支付
微信客服消息
微信开发数据
小程序更新
第三方平台接入
小程序项目实战
任务清单项目
基础项目
演练小程序框架的基本使用
基本技术:应用配置、界面数据绑定、界面布局、采集用户输入、用户操作事件处理、日志记录
电影榜单项目
HTTPS
第三方接口调用
列表数据绑定及显示
页面跳转传值
上拉加载更多
下拉刷新
分享到微信群或者朋友圈等
本地生活项目
网络访问
生命周期
地理围栏
Promise的运作
weUI 样式库
Node.js接口部署
HTTPS证书操作等
购物商场项目
首页推荐频道展示
分类筛选
搜索商品
分页加载数据及长列表展示优化
购物车
下单
支付
用户个人中心
POSTMAN接口测试工具
华为鸿蒙系统
HarmonyOS
HarmonyOS介绍和系统架构
开发环境:DevEco Studio 与 DevEco Device Tool
应用配置与资源文件
XML布局与加载
创建第二个页面跳转
HarmonyOS APP开发
Ability
Page Ability(Activity)
Page与AbilitySlice(Activity与Fragment)
Page与AbilitySlice生命周期
AbilitySlice路由导航(切换Fragment)
使用Intent完成页面跳转
使用AbilityContinuation实现Page跨设备迁移
Service Ability (Service)
服务的创建与生命周期
前天服务与后台服务
启动本地服务与启动远程设备服务
Service通信
Data Ability (Content Provider)
鸿蒙APP的数据的持久化
使用UserDataAbility创建数据提供方
鸿蒙数据管理
事物、数据库加密
关系型数据库
对象映射关系型数据库
轻量级偏好数据库
分布式数据服务
分布式文件服务
融合搜索与数据存储管理
使用DataAbilityHelper与数据提供方通信
Ability Form (APPWidget)
UI
组件与布局
UI组件类型
使用代码创建布局
使用XML创建布局
常用组件与布局
Text、Button、Image
线性布局DirectionalLayout
相对布局DependentLayout
动画
数值动画、属性动画、动画集合
多模输入
CES公共事件服务
系统公共事件与自定义公共事件(广播)
带权、有序与粘性公共事件
通知栏功能NotificationHelper
通知点击效果IntentAgent
剪切板
跨应用数据传递
线程与进程
TaskDispatcher
全局并发任务分发器GlobalTaskDispatcher
并发任务分发器ParallelTaskDispatcher
串行任务分发器SerialTaskDispatcher
专有任务分发器
SpecTaskDispatcher
UITaskDispatcher
MainTaskDispatcher
线程通信
EventHandler机制
HarmonyOs 多媒体开发
音频开发
音视频编解码
图像编解码与位图操作
相机CameraKit与声音AudioCapture
视频编解码、播放、录制、提取
音频播放采集、音量管理与短音(音效)播放
网络与近场通信
NFC控制
传统蓝牙与BLE低功耗
无线局域网WLAN与P2P点对点通信
网络管理
Socket通信
流浪统计与http缓存
电话服务
音频呼叫与视频呼叫
短信服务
设备管理
传感器
运动类
计步器、陀螺仪
环境类
温度、湿度
方向类
屏幕旋转、方向传感
光线类
环境光、RGB颜色传感
健康类
心率、按压检测
LED灯与振动器
位置服务
定位
地理编码转化
项目实战
HarmonyOS播放器
HarmonyOS新闻客户端