Android开发核心知识点笔记(不断更新中🔥)
>要想成为一名优秀的Android开发,一份知识体系是必不可少的~
感谢大家的关注与支持,Issues的问题都会看的,有问题都会慢慢改过来,实在是工作上比较忙,很难抽出时间来更新~
一不小心拖更了这么久,这次主要是针对Framework部分和音视频部分。(另外,之前做整合的时候记得有标注过原作者,之前有好友反馈说没保存下来,又得一个一个加上去~~~
目录以及总的结构方面还需要再优化一下,然后N久以前就打算再整理一下面试题相关的内容……emm,一直没有大家别怪我~后面计划会给大家制作一份知识体系图……
时间跨度可能不会很短,但会尽自己能力去更新维护。再次感谢大家的关注与支持,同时也感谢向我提出修改建议的朋友们!
Emm……辛辛苦苦种树……确定不来个Star鼓励一下?
>部分内容收集整理于网络,在此也再次感谢所有内容产出者的贡献! >> 版权声明 >>>如果觉得看起来比较麻烦,需要PDF版本,或是需要更多学习资料、面试资料,进阶、架构资料,都可以加上VX或QQ群领取~~。祝愿每一位有追求的Android开发同胞都能进大厂拿高薪!
Android-Notes
Android开发核心知识点笔记-目录:| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | | :---------------------------: | :-----------------------------: | :-----------------------------------------: | :------------------------------------: | :---------------------------: | :------------------------------: | :---------------------------------------------------: | :----------------------------------: | :-------------------------: | :------------------------: | | Java | Android | Android
扩展 | Frame
work | 性能优化 | 开源库
源码分析 | Gradle | 设计模式 | C++ | 音视频 | | :coffee: | :iphone: | :vibrationmode: | :filefolder: | :gear: | :mag: | :notebookwithdecorativecover: | :hammerand_wrench: | :copyright: | :vhs: | | A | B | C | 持续更新中 | | | | | | | | 计算机
网络基础 | Kotlin | 常见面试
算法题 | 持续更新中 | | | | | | | | :computer: | :lollipop: | :memo: | 持续更新中 | | | | | | |
Java 知识点汇总
* JVM * JVM 工作流程 * 运行时数据区(Runtime Data Area) * 程序计数器 * Java 虚拟机栈 * 本地方法栈 * Java 堆 * 方法区 * 方法指令 * 类加载器 * 垃圾回收 gc * 对象存活判断 * 垃圾收集算法 * 垃圾收集器 * 内存模型与回收策略 * Object * equals 方法 * hashCode 方法 * static * final * String、StringBuffer、StringBuilder * 异常处理 * 内部类 * 匿名内部类 * 多态 * 抽象和接口 * 集合框架 * HashMap * 结构图 * HashMap 的工作原理 * HashMap 与 HashTable 对比 * ConcurrentHashMap * Base 1.7 * Base 1.8 * ArrayList * LinkedList * CopyOnWriteArrayList * 反射 * 单例 * 饿汉式 * 双重检查模式 * 静态内部类模式 * 线程 * 状态 * 状态控制 * volatile * synchronized * 根据获取的锁分类 * 原理 * Lock * 锁的分类 * 悲观锁、乐观锁 * 自旋锁、适应性自旋锁 * 死锁 * 引用类型 * 动态代理 * 元注解
Android 知识点汇总
* Activity * 生命周期 * 启动模式 * 启动过程 * Fragment * 特点 * 生命周期 * 与Activity通信 * Service * 启动过程 * 绑定过程 * 生命周期 * 启用前台服务 * BroadcastReceiver * 注册过程 * ContentProvider * 基本使用 * 数据存储 * View * MeasureSpec * MotionEvent * VelocityTracker * GestureDetector * Scroller * View 的滑动 * View 的事件分发 * 在 Activity 中获取某个 View 的宽高 * Draw 的基本流程 * 自定义 View * 进程 * 进程生命周期 * 多进程 * 进程存活 * OOM_ADJ * 进程被杀情况 * 进程保活方案 * Parcelable 接口 * 使用示例 * 方法说明 * Parcelable 与 Serializable 对比 * IPC * IPC方式 * Binder * 流程 * AIDL 通信 * Messenger * Window / WindowManager * Window 概念与分类 * Window 的内部机制 * Window 的创建过程 * Activity 的 Window 创建过程 * Dialog 的 Window 创建过程 * Toast 的 Window 创建过程 * Bitmap * 配置信息与压缩方式 * 常用操作 * 裁剪、缩放、旋转、移动 * 保存与释放 * 图片压缩 * BitmapFactory * Bitmap创建流程 * Option类 * 基本使用 * 内存回收 * 屏幕适配 * 单位 * 头条适配方案 * 刘海屏适配 * Context * SharedPreferences * 获取方式 * getPreferences * getDefaultSharedPreferences * getSharedPreferences * 架构 * apply / commit * 注意 * 消息机制 * Handler 机制 * 工作原理 * ThreadLocal * MessageQueue * Looper * Handler * 线程异步 * AsyncTask * 基本使用 * 工作原理 * HandlerThread * IntentService * 线程池 * RecyclerView 优化 * Webview * 基本使用 * WebView * WebSettings * WebViewClient * WebChromeClient * Webview 加载优化 * 内存泄漏
Android 扩展知识点汇总
* ART * ART 功能 * 预先 (AOT) 编译 * 垃圾回收优化 * 开发和调试方面的优化 * ART GC * Hook * 基本流程 * 使用示例 * Proguard * 规则 * 公共模板 * 常用的自定义混淆规则 * aar中增加独立的混淆配置 * 检查混淆和追踪异常 * 架构 * MVC * MVP * MVVM * Jetpack * 架构 * 使用示例 * NDK 开发 * JNI 基础 * 数据类型 * String 字符串函数操作 * 常用 JNI 访问 Java 对象方法 * NDK 开发 * 基础开发流程 * System.loadLibrary() * CMake 构建 NDK 项目 * 常用的 Android NDK 原生 API * 类加载器 * 双亲委托模式 * DexPathList
Framework 知识点汇总
* Handler * Handler机制实现原理(一)宏观理论分析与Message源码分析 * Message: * 看一下全局变量:有好多存数据的对象。 * Obtain方法: * recycle():回收当前message到全局池 * setData: * 发送消息的一些方法: * 构造方法: * writeToParcel: * Handler机制实现原理(二)MessageQueue的源码分析 * 消息队列存储原理 * 使用JNI实现的native方法 * 创建与销毁 * 消息入队管理enqueueMessage()方法 * 同步消息拦截器 * 队列空闲处理器IdleHandler * 消息出队管理next()方法 * 总结 * Handler机制实现原理(三)Looper的源码分析 * 创建与退出Looper * 运行Looper处理消息 * 总结 * Handler机制实现原理(四)handler的源码分析 * 初始化 * 发送消息 * 接收消息 * 内存泄漏的可能 * Handler机制实现原理(五)总结 * Message缓存池 * 真正的阻塞发生在MessageQueue * 为什么推荐使用Handler实现线程间通信 * Binder * Binder原理(一)学习Binder前必须要了解的知识点 * Linux和Android的IPC机制种类 * Linux中的IPC机制种类 * Android中的IPC机制 * Linux和Binder的IPC通信原理 * Linux的IPC通信原理 * Binder的通信原理 * 为什么要使用Binder * 为什么要学习Binder? * Binder原理(二)ServiceManager中的Binder机制 * 基于Binder通信的C/S架构 * MediaServer的main函数 * 每个进程唯一的ProcessState * ServiceManager中的Binder机制 * BpBinder和BBinder * 解密IServiceManager * IServiceManager家族 * 小结 * Binder原理(三)系统服务的注册过程 * 从调用链角度说明MediaPlayerService是如何注册的 * writeTransactionData函数分析 * waitForResponse函数分析 * 小结 * 从进程角度说明MediaPlayerService是如何注册的 * 总结 * Binder原理(四)ServiceManager的启动过程 * ServiceManager的入口函数 * 打开binder设备 * 注册成为Binder机制的上下文管理者 * 循环等待和处理client端发来的请求 * 总结 * Binder原理(五)系统服务的获取过程 * 客户端MediaPlayerService请求获取服务 * 服务端ServiceManager处理请求 * 总结 * Binder原理(六)Java Binder的初始化 * Java Binder的JNI注册 * Binder类的注册 * BinderInternal类的注册 * Binder原理(七)Java Binder中系统服务的注册过程 * 将AMS注册到ServiceManager * BinderInternal.getContextObject() * ServiceManagerNative.asInterface() * getIServiceManager().addService() * 引出JavaBBinder * 解析JavaBBinder * Java Binder架构 * Zygote * Zygote(一):Android系统的启动过程及Zygote的启动过程 * init进程 * 属性服务初始化与启动 * 设置进程信号处理 * 解析init配置文件 * Zygote进程启动 * SystemServer启动过程 * Zygote(二):应用进程的启动过程 * Zygote监听客户端请求 * AMS发送创建进程请求 * Zygote接收信息并创建进程 * 启动Binder线程池 * AMS * AMS源码分析(一)Activity生命周期管理 * Activity的生命周期 * 一个Activity从启动到销毁所经历的周期 * 从一个Activity启动另一个Activity的生命周期 * 源码分析 * Binder * IdleHandler * Activity在AMS中的标识 * 启动过程时序图 * 从AActivity跳转BActivity的生命周期分析 * AActivity#onPause * BActivity#onCreate * BActivity#onStart * BActivity#onResume * AActivity#onStop * 从BActivity返回到AActivity * BActivity#onPause * AActivity#onStart、AActivity#onResume * BActivity#onStop、BActivity#onDestroy * AMS源码分析(二)onActivityResult执行过程 * onActivityResult * AActivity跳转BAcitivty并从BActivity返回数据 * Intent.FLAGACTIVITYFORWARD_RESULT * 示例: * AActivity以startActivityForResult方式打开BActivity * BActivity以普通方式打开CActivity,设置Intent 的Flag Intent.FLAGACTIVITYFORWARD_RESULT * 源码解析 * ActivityResult数据的写入 * ActivityResult数据的传递 * Intent.FLAGACTIVITYFORWARD_RESULT的实现 * AMS源码分析(三)AMS中Activity栈管理详解 * Activity栈管理相关类 * ActivityStackSupervisor * ActivityDisplay * TaskRecord * ActivityStack * 关系图: * 启动模式 * standard * Intent.FLAGACTIVITYCLEAR_TOP * 源码分析 * 加入TaskRecord * standard + Intent.FLAGACTIVITYCLEAR_TOP * singleTop * 流程图: * 原Activity不在栈顶 * 原Activity在栈顶 * singleTop + Intent.FLAGACTIVITYCLEAR_TOP * log * 原Activity不在栈顶 * 原Activity在栈顶 * 原Actiivty在栈顶且设置Intent.FLAGACTIVITYCLEAR_TOP * 源码分析 * singleTop + Intent.FLAGACTIVITYCLEAR_TOP * singleTask * 启动流程 * 场景一 * 场景二 * 场景三 * singeTask源码分析 * singleInstance * Intent.FLAGACTIVITYNEW_TASK、taskAffinity、新Task的创建 * Intent.FLAGACTIVITYNEW_TASK的自动设置 * taskAffinity的识别 * 是否创建新task的识别 * 总结 * PMS * 深入PMS源码(一)—— PMS的启动过程和执行流程 * PMS简介 * PMS的启动过程 * PMS构造函数 * PMS的工作过程 * 解析配置文件package.xml * 扫描安装的应用程序 * 将apk解析数据同步到PMS的属性中 * 更新配置文件 * 深入PMS源码(二)—— APK的安装和卸载源码分析 * 应用程序安装基础 * PMS中APK安装过程 * 应用程序的卸载过程 * 深入PMS源码(三)—— PMS中intent-filter的匹配架构 * PMS保存IntentFilter * IntentFilter的查找匹配 * WMS * WMS(一):WMS的诞生 * WMS概述 * 窗口管理 * 窗口动画 * 输入系统的中转站 * Surface管理 * WMS的诞生 * WMS(二):WMS的重要成员和Window的添加过程 * WMS的重要成员 * Window的添加过程(WMS部分) * addWindow方法part1 * addWindow方法part2 * addWindow方法part3 * addWindow方法总结 * 结语 * WMS(三):Window的删除过程 * Window的删除过程
性能优化知识点汇总
* 启动优化 * 视觉优化 * 启动主题优化 * 代码优化 * 冷启动耗时统计 * Application 优化 * 闪屏页业务优化 * 广告页优化 * 优化效果 * 启动窗口 * UI渲染优化 * CPU、GPU的职责 * 查找Overdraw * clipRect解决自定义View的OverDraw * Hierarchy Viewer的使用 * 内存抖动现象 * 崩溃优化 * 崩溃 * 崩溃的收集 * ANR * 应用退出 * 崩溃处理 * 崩溃现场 * 崩溃分析 * 系统崩溃 * 内存优化 * 优化工具 * Memory Profiler * Memory Analyzer(MAT) * LeakCannary * 内存管理 * 内存区域 * 对象存活判断 * 垃圾回收算法 * 内存抖动 * 模拟内存抖动 * 分析并定位 * 内存泄露 * 模拟内存泄露 * 分析并定位 * MAT分析工具 * Overview * Histogram * Dominator_tree * SQL * Thread_overview * Top Consumers * Leak Suspects * 通过ARTHook检测不合理图片 * 获取Bitmap占用内存 * 检测大图 * 线上内存监控 * 常规方案 * LeakCannary定制改造 * 完整方案 * 卡顿优化 * 卡顿 * 帧率 * 卡顿原因 * 卡顿检测 * 使用dumpsys gfxinfo * 使用systrace * 使用BlockCanary * 使用Choreographer * 优化 * 存储优化 * 交换数据格式 * SharePreferences 优化 * Bitmap 解码 * 数据库优化 * 事务 * SQLiteStatement * 索引 * 其它通用优化 * 网络优化 * 网络连接对用户的影响 * 分析网络连接的工具 * Network Monitor * 网络代理工具 * 从哪些方面优化网络连接 * 接口设计 * 网络缓存 * 弱网测试&优化 * 耗电优化 * 耗电监控 * Android Vitals * 耗电监控都监控什么 * 如何监控耗电 * Java Hook * 插桩 * 多线程并发优化 * Thread 使用 * Thread 中断 * 同步 * Android Threading * AsyncTask * HandlerThread * IntentService * Loader * ThreadPool * 线程优先级 * 安装包优化 * 常用的优化方式 * 清理无用资源 * 图片资源优化 * 资源动态加载 * lib库优化 * 7zip压缩资源 * 代码混淆 * 资源(res)混淆 * 使用微信AndResGuard * Facebook的redex优化字节码
Android 开源库源码分析
* OKHttp * OKHttp请求流程 * 新建OKHttpClient客户端 * 同步请求流程 * 异步请求流程 * 网络请求缓存处理 * 连接池 * Retrofit * 基本使用流程 * Retrofit构建过程 * Retrofit核心对象解析