目录介绍
- 01. 基础组件(9 篇)
- 02.IPC 机制(7 篇)
- 03.View 原理(9 篇)
- 04. 动画机制(2 篇)
- 05.Res 资源(6 篇)
- 06. 消息机制(12 篇)
- 07. 多媒体(16 篇)
- 08.View 事件(9 篇)
- 09. 多线程(12 篇)
- 10.Window(19 篇)
- 11.WebView(4 篇)
- 12. 网络相关(7 篇)
- 13. 注解(14 篇)
- 14. 音视频(13 篇)
- 15. 优化相关(19 篇)
- 16. 流行框架(23 篇)
- 17. 数据处理
- 18.framwork
- 19. 复杂控件(12 篇)
- 20.Bug 管理
- 21. 经典总结(16 篇)
- 23. 架构技术(13 篇)
- 24.kotlin(29 篇)
- 25.RecyclerView(31 篇)
- 26. 组件化(7 篇)
- 27. 路由框架(7 篇)
好消息
- 博客笔记大汇总【16 年 3 月到至今】,包括 Java 基础及深入知识点,Android 技术博客,Python 学习笔记等等,还包括平时开发中遇到的 bug 汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是 markdown 格式的!同时也开源了生活博客,从 12 年起,积累共计 N 篇[近 100 万字,陆续搬到网上],转载请注明出处,谢谢!
- 链接地址:https://github.com/yangchong2…
- 如果觉得好,可以 star 一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变!
01. 基础组件
-
02.Activity 基础介绍
- Activity 生命周期,特殊情况下生命周期,Activity 的启动模式,特殊情况栈交互,Activity 的 Flags
-
03.Activity 启动流程
- Launcher 启动开启 Activity,ActivityManagerService 详谈,执行栈顶 Activity 的 onPause 方法,启动 Activity 所属的应用进程,执行启动 Acitivity 重点逻辑
-
04.Activity 布局创建
- handleLaunchActivity,performLaunchActivity,activity.attach,Activity 的 onCreate 方法,setContentView 源码分析
-
05.Activity 布局绘制
- Activity 布局加载简介,handleResumeActivity,WindowManager 作用,performTraversals()方法,Activity 布局绘制总结
-
06.Activity 探坑分析
- Activity 异常生命周期,后台 Activity 被系统回收,如何判断 activity 优先级,App 切换到后台分析,Activity 传递参数数据,Activity 任务战 Task
-
07.BroadCastReceiver1
- 什么是广播 Broadcast,广播 Broadcast 作用,广播 Broadcast 分类,动态注册 BroadCast,发送本地广播
-
08.BroadCastReceiver2
- 监听网络状态变化,监听电量变化,应用安装更新卸载监听
-
09.BroadCastReceiver3
- 广播实现原理,抽象方法 onReceive(),广播的类型,内存泄漏分析
-
12.Fragment 基础
- Fragment 生命周期,Fragment 静态和动态使用方式,Fragment 回退栈,Fragment 与 Activity 通信,Fragment 旋转场景,FragmentAdapter 选择
-
13.Fragment 进阶
- 什么是内存重启,onHiddenChanged 回调时机,Fragment 与 Activity 之间传值,Fragment 与 Fragment 之间传值,为何不构造传值,FragmentManager 栈视图,Fragment 之懒加载使用,思考 Fragment 能否不依赖 Activity
-
14.Fragment 填坑
- getActivity()空指针,Fragment 发生重叠,Fragment 高耦合性,处理返回键逻辑
-
16.Fragment 源码
- Fragment 管理流程源码分析,Fragment 生命周期是怎么来的,Fragment 回退栈是如何实现的
-
32.Android 混淆
- 什么是混淆,proguard-rules.pro 文件
-
36.CompileSdkVersion 和 MinSdkVersion
- CompileSdkVersion 的作用,MinSdkVersion 的作用,TargetSdkVersion 的作用
-
40.Log 深入解析
- 关于 Log 源码介绍
02.IPC 机制
-
01.IPC 通信方式介绍
- 使用 Intent,使用文件共享,使用 Messenger,使用 AIDL,使用 ContentProvider,使用 Socket
-
02.IPC 之线程进程
- Android 中如何控件进程,进程的重要性,Android 中线程,工作线程
-
05.IPC 之序列化
- 什么是 IPC,开启多进程,多进程影响,Serializable,Parcelable
-
06.IPC 之 Messager
- Messenger 基本概述,服务端,客户端,双向通信
-
11.Aidl 基础介绍
- 什么是 AIDL,AIDL 作用,AIDL 支持数据类型,服务端和客户端,注意问题
-
12.Aidl 通信案例
- aidl 通信业务需求,操作步骤伪代码,案例测试调试,可能出现的问题,aidl 不要做耗时操作
03.View 原理
-
01.View 绘制流程
- View 绘制的流程框架,View 中重要方法,自定义 View 优化策略
-
04.View 之 onMeasure 深入介绍
- Measure 流程分析,MeasureSpec 的确定,View 的测量流程
-
05.View 之 onLayout 深入分析
- Layout 流程,View 的布局流程
-
06.View 之 onDraw 深入介绍
- onDraw 源码分析,onDraw 案例之绘制圆环,onDraw 案例之绘制圆形 ImageView 等等
-
07.View 之 Canvas,Paint,Matrix,RectF 等介绍
- Paint 画笔介绍,图形绘制,文本绘制;Canvas 画布介绍,设置属性,画图【重点】;Matrix 变换矩阵介绍,RectF 介绍,关于使用到这几个属性的自定义 View 案例
-
08.View 之 invalidate,requestLayout,postInvalidate
- requestLayout、invalidate 与 postInvalidate 作用与区别?
-
10. 获取 View 宽高
- 为何直接获取宽高为 0?onWindowFocusChanged 获取宽高,view.post(runnable)获取宽高,ViewTreeObserver 获取宽高,手动测量控件宽高,这几种方式的区别介绍分析。
-
12. 自定义 View 控件
- 自定义控件步骤,创建 View,测量 View(Measure),绘制 View(Draw),与用户进行交互,优化自定义 View
-
13. 自定义 ViewGroup
- 自定义 ViewGroup 步骤,创建 ViewGroup,测量 View(Measure),布局 View(Layout),绘制 View(Draw),事件分发处理,与用户进行交互,自定义控件优化
04. 动画机制
-
01. 动画机制总结
- Android 动画类型分类,实现方式,ValueAnimator 与 ObjectAnimator 区别,以及补间动画原理,部分源码分析
-
02. 动画源码解析
- Animation 和 Animator 区别,Animation 运行原理和源码分析,如何计算动画数据,动画数据如何存储,Animation 的调用;Animator 运行原理和源码分析,属性动画新的概念,属性动画 start 执行流程,属性动画 cancel 和 end 执行流程,属性动画 pause 和 resume 执行流程,
-
07. 加载 json 动画
- 如何解析 json 动画,加载动画优化点,加载 json 动画原理,部分源码解析说明,性能与常见动画分析,可能出现的异常
05.Res 资源(6 篇)
-
09.Selector 选择器总结
- selector 创建方式,状态设置说明,义的 xml 文件可以作为两种资源使用:drawable 和 color。TextView 如何设置背景和字体选择器?
-
10.Shape 自定义图形汇总
- shape 可以自定义四种类型的形状,常用方法介绍
-
11.Style 样式汇总
- 样式的定义,样式的用法不只是用于单个 View,也能用于 Activity 或整个 Application,如何简化样式从而分类拆分成多个文件
-
12. 主题 Theme 的使用总结
- style 设置
-
13.attr 属性介绍
- attr 属性的定义 / 读取 / 出错 / 使用,自定义 attr 属性与读取,如果在 attr 中不同 View 引用相同属性名字时出现错误的解决方法
06. 消息机制
-
01.Handler 基础使用
- Handler 常见使用方式,在子线程中定义 Handler,Handler 的 post 方法和 view 的 post 方法,避免子线程手动创建 looper,解决 Handler 内存泄漏
-
02.Handler 机制体系
- Handler 作用与功能,MessageQueue 作用与功能,Looper 作用与功能,Message 作用与功能,消息机制实现的步骤
-
03. 消息机制源码流程
- Handler 发送消息,Looper 轮训操作,MessageQueue 消息队列,MessageQueue 传递消息给 Handler,Handler 接收消息并处理
-
04.Handler 深度解析
- Handler 构造方法分析,handler.sendMessage(msg)
-
05.Looper 深度解析
- Activity 如何自动绑定 Looper,Looper.prepare()方法源码分析,Looper.prepare()能否调用多次,Looper 中用什么存储消息,Looper.loop()方法源码分析,Activity 生命周期依赖 Looper,Looper 死循环为何不阻塞应用卡死
-
06.MessageQueue
- MessageQueue 作用介绍,MessageQueue 的定义,enqueueMessage()源码,next()方法源码分析
-
08. 主线程中 Looper 的轮询死循环为何没阻塞主线程
- 造成 ANR 的原因,Looper.loop()方法无限循环,处理消息 handleMessage 方法,loop 的循环消耗性能吗?
-
09. 子线程更新 UI
- Android 中子线程可以更新 UI 吗,子线程更新 UI 有哪些方式,runOnUiThread 如何实现子线程更新 UI,View.post(Runnable r)更新 UI,子线程更新 UI 总结概括
-
12.HandlerThread
- HandlerThread 定义,HandlerThread 几个特性,HandlerThread 源码分析,
-
13. 消息机制 ThreadLocal
- Android 消息机制,ThreadLocal 基础介绍,ThreadLocal 分析,Handler 为何用 ThreadLocal
07. 多媒体
-
01. 图片相关整理
- 网络请求图片资源,保存 bitmap 图片,实现带有圆角的图片
-
03. 加载图片资源介绍
- 加载 Bitmap
-
04.Bitmap 计算内存
- 如何计算占用内存?bitmap 内存大小 = 图片长度 x 图片宽度 x 单位像素占用的字节数计算内存对吗?一个像素占用内存,使用 API 获取内存
-
05.Bitmap 回收问题
- recycle()方法,Bitmap 缓存原理,Bitmap 的复用,Bitmap 如何复用
-
06.Bitmap 压缩处理
- Bitmap 的压缩方式,Bitmap 质量压缩,Bitmap 采样率压缩,Bitmap 缩放法压缩
-
07.Bitmap 图片处理
- Bitmap,Drawable,InputStream,Byte[]之间进行转换,将 View 控件转换为 bitmap,Bitmap 优化逻辑与原理
-
08. 加载大图流程
- 网络请求图片,压缩缓存图片,填充到 View 控件,自定义图片控件,加载大图原理
-
09.SurfaceView 源码分析
- SurfaceView 是什么,SurfaceView 源码分析,在子线程中执行绘制操作为何不会阻塞线程?
-
10.Android 保存多张图片到本地
- 实际开发保存图片遇到的问题,直接用 http 请求图片并保存本地,用 glide 下载图片保存本地,如何实现连续保存多张图片
-
11.Bitmap,Drawable,InputStream
- Bitmap,Drawable,InputStream,Byte[] 之间进行转换
-
12.Bitmap 避免 OOM
- Bitmap 占用内存介绍,影响 Bitmap 占用内存因素,图像加载的方式,加载图像内存去哪里了,具体实现加载图片步骤
-
16. 自定义阴影控件
- 阴影效果有哪些实现方式,实现阴影效果 Api,设置阴影需要注意哪些,常见 Shape 实现阴影效果,自定义阴影效果控件,如何使用该阴影控件,在 recyclerView 中使用注意点
08.View 事件
-
01.View 事件基础
- 事件分发的对象是谁?事件在哪些对象间进行传递?事件分发过程涉及方法?事件分发机制方法说明?
-
02.View 事件分发场景
- 事件分发背景描述,事件传递情况
-
03.View 事件机制源码分析
- Android 中事件分发顺序?Activity 的事件分发机制?ViewGroup 事件的分发机制?View 事件的分发机制?onTouch()和 onTouchEvent()的区别?
-
04.View 事件机制
- 触摸事件, 分发事件, 拦截事件, 三个事件机制怎么向其调用者传递处理结果, 滑动冲突的思路及方法,以及具体的滑动冲突解决方案案例
-
05.View 的滑动冲突
- 通过一个滑动冲突的案例,来讲解外部拦截法解决滑动冲突,内部拦截法解决滑动冲突
-
07.View 事件总结 1
- Android 事件分发机制,View 和 ViewGroup 分发事件,onTouch()、onTouchEvent()和 onClick()执行顺序,View 处理事件的优先级,点击事件传递过程,事件传递规则要点
-
08.View 事件总结 2
- View 滑动有哪些方法,Activity 事件分发过程,Window 事件分发过程,DecorView 的事件分发,根 View 的事件分发
09. 多线程
-
00.Android 多线程
- Android 中的线程,线程交互之 Handler 机制,线程切换的类,java 中的多线程,线程池管理多线程,Handler 和 AsyncTask,线程安全问题
-
01. 频繁创建 Thread 缺点
- 遇到的问题分析,多线程实现 Runnable 弊端
-
02.AsyncTask 介绍
- 先看下 AsyncTask 用法,AsyncTask 源码深入分析,异步机制的实现,不同的 SDK 版本区别
-
03.AsyncTask 缺陷问题
- AsyncTask 对应线程池,AsyncTask 生命周期问题,AsyncTask 内存泄漏问题,AsyncTask 结果丢失问题,AsyncTask 并行还是串行问题
-
04.IntentService 使用
- 使用步骤,IntentService 作用,IntentService 使用场景
-
05.IntentService 源码分析
- IntentService 的作用,使用场景,源码分析,整体源码展示及归纳,如何单独开启 1 个新的工作线程,IntentService 如何将 Intent 传递给服务并且依次插入到工作队列中,IntentService 与其他线程对比,HandlerThread 深入分析
-
08. 线程池基础
- ThreadPoolExecutor 类介绍,关于线程池的分类,线程池一般用法,线程创建规则
-
09. 线程池案例测试
- 使用线程池管理线程的优点,以及案例代码测试效率
-
10.Android 中几种进程
- 在安卓系统中:当系统内存不足时,Android 系统将根据进程的优先级选择杀死一些不太重要的进程,优先级低的先杀死。进程优先级从高到低如下。
-
15.Android 线程池封装库
- 轻量级线程池封装库,支持线程执行过程中状态回调监测(包含成功,失败,异常等多种状态);支持创建异步任务,并且可以设置线程的名称,延迟执行时间,线程优先级,回调 callback 等;可以根据自己需要创建自己需要的线程池,一共有四种;线程异常时,可以打印异常日志,避免崩溃。
10.Window
-
01.Activity、Window、View 三者关系
- 深入分析 Activity、Window、View 三者之间的关系
-
02.Toast 源码深度分析
- 最简单的创建,简单改造避免重复创建,show()方法源码分析,scheduleTimeoutLocked 吐司如何自动销毁的,TN 类中的消息机制是如何执行的,普通应用的 Toast 显示数量是有限制的,用代码解释为何 Activity 销毁后 Toast 仍会显示,Toast 偶尔报错 Unable to add window 是如何产生的,Toast 运行在子线程问题,Toast 如何添加系统窗口的权限等等
-
03.DialogFragment 源码分析
- 最简单的使用方法,onCreate(@Nullable Bundle savedInstanceState)源码分析,重点分析弹窗展示和销毁源码,使用中 show()方法遇到的 IllegalStateException 分析
-
04.Dialog 源码分析
- AlertDialog 源码分析,通过 AlertDialog.Builder 对象设置属性,Dialog 生命周期,Dialog 中 show 方法展示弹窗分析,Dialog 的 dismiss 销毁弹窗,Dialog 弹窗问题分析等等
-
05.PopupWindow 源码分析
- 显示 PopupWindow,注意问题宽和高属性,showAsDropDown()源码,dismiss()源码分析,PopupWindow 和 Dialog 有什么区别?为何弹窗点击一下就 dismiss 呢?
-
06.Snackbar 源码分析
- 最简单的创建,Snackbar 的 make 方法源码分析,Snackbar 的 show 显示与点击消失源码分析,显示和隐藏中动画源码分析,Snackbar 的设计思路,为什么 Snackbar 总是显示在最下面
-
07. 弹窗常见问题
- DialogFragment 使用中 show()方法遇到的 IllegalStateException, 什么常见产生的?Toast 偶尔报错 Unable to add window,Toast 运行在子线程导致崩溃如何解决?
-
09.onAttachedToWindow 和 onDetachedFromWindow
- onAttachedToWindow 的调用过程,onDetachedFromWindow 可以做什么?
-
10.DecorView 介绍
- 什么是 DecorView,DecorView 的创建,DecorView 的显示,深度解析
-
11. 弹窗问题总结
- PopupWindow 和 Dialog 区别
-
15. 窗口管理框架概述
- Android 显示系统分为 3 层,Android 显示框架里几个角色
-
18. 窗口管理服务 WMS
- Window 窗口介绍,WindowManager 介绍,Window 的添加流程,Window 的删除流程,Window 的更新流程
-
19. 布局解析者 Inflater
- LayoutInflater 介绍,PhoneLayoutInflater 介绍,inflate 源码分析,获取 XmlResourceParser,解析 View 树操作步骤,解析 View 操作步骤
11.WebView
-
01.WebView 基础使用
- WebView 的常用方法,WebView 常用类的介绍,WebView 注意事项,WebView 滑动监听,为 WebView 自定义错误显示界面,判断 WebView 是否已经滚动到页面底端
-
02.WebView 和 js 交互
- Android 去调用 JS 的代码方式,JS 去调用 Android 的代码方式,Android 调用 HTML 中的 javascript 脚本并传递参数,HTML 中的 javascript 脚本调用 Android 本地代码并传递参数,什么时候注入 js 探索
-
03.WebView 防坑总结
- WebView 页面中播放音视频, 退出 Activity 后仍然有声音,后台无法释放 js 导致发热耗电,301/302 业务场景及白屏问题,WebSettings.setJavaScriptEnabled 安全问题,加载证书错误,WebView 内存泄漏问题场景和解决办法,如何处理加载错误(Http、SSL、Resource)?,如何操作 cookie?H5 页面如何处理登录失效问题?,H5 页面有混合 http 和 https 的链接,5.0 以上系统不支持混合模式,需要通过配置来开启
-
04.WebView 源码分析
- loadurl,LoadData,loadDataWithBaseURL 分析
12. 网络相关
-
01. 网络基础笔记
- Http 无连接与无状态区别,HTTP 的缓存机制,HTTP 协议 Keep-Alive 模式等等
-
02.Retrofit 基本使用和源码解析
- Retrofit 详细使用方法介绍,Retrofit 与 RxJava 结合,Form 表单提交与 multipart/form-data,源码分析
-
03.Http 和 Https 区别
- http 和 https 之间的区别,以及其他相关知识点
-
04.TCP 和 UDP 详细介绍
- TCP 和 UDP 的区别,三次握手建立连接,四次握手断开连接,Socket 文件传输
-
05. 网络请求详解
- Http 请求与响应,Http 请求方式,get 和 post 请求的区别
-
06.Cookie、Session、Token 笔记整理
- 关于 cookie,session,和 token 使用场景介绍,以及它们之间有何区别
-
07.Http 状态码详解
- 属于整理内容,十分全面,方便查询状态码含义
13. 注解
- 01.Annotation 注解详细介绍
- [02.Dagger2 深入分析,待更新]()
-
03. 注解详细介绍
- 什么是注解,注解分类有哪些?自定义注解分类?运行注解案例展示分析,以一个最简单的案例理解注解……使用注解替代枚举,使用注解限定类型
-
04.APT 技术详解
- 什么是 apt?理解注解处理器的作用和用途……android-apt 被替代?annotationProcessor 和 apt 区别?什么是 jack 编译方式?
-
06. 自定义 annotation 注解
- @Retention 的作用?@Target(ElementType.TYPE)的解释,@Inherited 注解可以被继承吗?Annotation 里面的方法为何不能是 private?
-
07. 注解之兼容 kotlin
- 后期更新
-
08. 注解之处理器类 Processor
- 处理器类 Processor 介绍,重要方法,Element 的作用,修饰方法的注解和 ExecutableElement,了解修饰属性、类成员的注解和 VariableElement……
-
10. 注解遇到问题和解决方案
- 无法引入 javax 包下的类库,成功运行一次,修改代码后再运行就报错
-
11. 注解代替枚举
- 在做内存优化时,推荐使用注解代替枚举,因为枚举占用的内存更高,如何说明枚举占用内存高呢?这是为什么呢?
-
13.Android 之注解问题
- 13.0.0.1 什么是注解?系统内置的标准注解有哪些?SuppressWarnings 用过没?Android 中提供了哪些与线程相关的注解?
- 13.0.0.2 什么是 apt?apt 的难点和优势?什么是注解处理器?抽象处理器中四个方法有何作用?annotationProcessor 和 apt 区别?
- 13.0.0.3 注解是怎么分类的?自定义注解又是怎么分类的?运行期注解原理是什么?实际注解案例有哪些?
- 13.0.0.4 在自定义注解中,Annotation 里面的方法为何不能是 private?Annotation 里面的方法参数有哪些?
- 13.0.0.5 @Inherited 是什么意思?注解是不可以继承的,这是为什么?注解的继承这个概念该如何理解?
- 13.0.0.6 什么是依赖注入?依赖注入案例举例说明,有哪些方式,具备什么优势?依赖查找和依赖注入有什么区别?
- 13.0.0.7 路由框架为何需要依赖注入,不用的话行不行?路由用什么方式注入,这些注入方式各具何特点,为何选择注解注入?
- 13.0.0.8 实际开发中使用到注解有哪些,使用注解替代枚举?如何通过注解限定传入的类型?为何说枚举损耗性能?
14. 音视频
- 1.0.1 如何扫描本地音频或者视频
- 1.0.2 深入学习酷狗,混沌大学那种锁屏页面原理
- 1.0.3 为什么要捕获 / 丢弃音频焦点详细讲解
- 1.0.4 耳机声控,以及耳机拔出或者插入控制播放暂停
- 1.0.5 音视频编码解码深入分析总结
- 1.0.6 实现音视频 1.5 倍,2 倍播放速率
- 1.0.7 音频的加密与解密案例实践深入总结
- 1.0.8 音频基础知识和概念的介绍
- 1.0.9 [音视频混合案例介绍]后期更新
- 1.1.0 如何构建知识图谱,重点
- 1.1.1 完整视频播放器案例总结与分析
- 1.1.2 关于博客笔记大汇总
- 1.1.3 Android 编码规范
- 1.1.4 Notification 通知控制播放
15. 优化相关(19 篇)
-
01. 内存泄漏优化
- 常见的内存泄漏场景分析,原理分析,及解决办法,比如:错误使用单例造成的内存泄漏,错误使用静态变量,Handler 使用不当造成的内存泄漏,非静态内部类创建静态实例造成的内存泄漏,资源未关闭造成的内存泄漏,动画资源未释放导致内存泄漏等等。
-
02. 网络优化
- 图片分类优化,获取网络数据优化,网络请求异常拦截优化
-
03. 布局优化
- 常见布局优化方法,使用 include 标签,ViewStub 深度解析,视图层级 <merge/>
-
04. 懒加载优化
- ViewPager+Fragment 组合,当 Fragment 处理可见时,才去请求网络数据,同时 onLazyLoad()加载数据条件,以及部分源码分析
-
05. 代码优化
- lint 检查去除无效代码,代码规范优化,View 异常优化,去除淡黄色警告优化,合理使用集合,Activity 不可见优化,节制的使用 Service
-
06.App 线程优化
- 创建 Thread 弊端,为何要用线程池,那些地方使用线程池
-
07.App 启动页优化
- 存在白屏问题,解决白屏的办法,Application 启动速度优化,启动页面屏蔽返回按键
-
08. 图片优化
- bitmap 优化,glide 加载优化
-
09. 静态变量优化
- 不要用静态变量保存核心数据,实际开发中遇到的问题
-
10.APP 瘦身优化
- APK 组成,如何压缩优化 apk,如何检测哪些无效代码
-
11.App 卡顿原因
- Android 卡顿原理,复杂的视图树,频繁的 requestlayout(),UI 线程被阻塞,内存抖动
-
12. 对象池 Pools 优化
- 什么是对象池,glide 哪里用到对象池,多条件 key 缓存 bitmap,glide 对象池总结,学以致用对象池,对象池的容量
-
14. 轮询操作优化
- 轮询操作是啥,轮训请求实践,与长连接相关的轮训请求,与页面相关的轮训请求
-
15. 网络异常优化
- 网络请求异常分类,开发中注意问题,原始的处理方式,如何减少代码耦合性,异常统一处理步骤
-
16. 注解替代枚举
- 使用注解限定传入类型,使用注解替代枚举
-
17. 四种引用优化
- 软引用使用场景,弱引用使用场景,使用场景分析
-
19. 去除重复依赖库优化
- 如何查询重复库,如何代码去重配置
-
20. 状态管理优化
- 界面状态有哪些,采用 include 方式管理,在 Base 类中处理逻辑,如何降低偶性和入侵性,封装低入侵性状态库
-
31. 优化分析工具
- Studio Profiler 介绍,CPU 分析器,内存分析器,网络分析器,TraceView
19. 复杂控件
-
01.ScrollView 详细介绍
- ScrollView 滚动到顶部,ScrollView 判断是否滑动到顶部或者底部,ScrollView 在最顶部或者最底部的时候不消费事件
-
02.NestedScrollView
- NestedScrollView 滚动到顶部,NestedScrollView 为何有时滚不到顶部,NestedScrollView 子布局有时候显示不出高度,NestedScrollView 中嵌套 ViewPager
-
07. 自定义 TabLayout
- 原生 TabLayout 局限,TabLayout 源码解析,设置自定义 tabView 选项卡,自定义指示器的长度,设置滑动改变选项卡颜色,使用反射的注意要点
-
09.CoordinatorLayout 使用
- CoordinatorLayout 是什么,如何搭配使用,CoordinatorLayout 属性,AppBarLayout 属性,Toolbar 属性
-
10.CoordinatorLayout 源码
- CoordinatorLayout 类源码说明,Behavior 的初始化操作,CoordinatorLayout 的测量布局,CoordinatorLayout 中依赖监听,CoordinatorLayout 的 TouchEvent
-
11.AppBarLayout
- AppBarLayout 是什么,AppBarLayout 属性介绍
-
12.CollapsingToolbarLayout
- CollapsingToolbarLayout 是什么,CollapsingToolbarLayout 属性,其他注意要点说明
-
14. 自定义 Behavior
- CoordinatorLayout 滑动抖动问题描述,滑动抖动问题分析,自定义 AppBarLayout.Behavior 说明,CoordinatorLayout 滑动抖动解决方案
-
15.CoordinatorLayout 问题
- CoordinatorLayout+ViewPager 滑动问题,AppbarLayout+ViewPager 滑动问题
-
20.ViewPager 懒加载
- ViewPager 简单介绍,ViewPager 弊端分析,ViewPager 预加载,懒加载出现问题,如何实现预加载机制
-
21.PagerAdapter
- PagerAdapter 简单介绍,PagerAdapter 抽象方法,PagerAdapter 原理介绍,PagerAdapter 缓存和销毁,自定义 PagerAdapter
20.bug 管理
-
00. 常见的异常
- 分别列举了实际开发中大部分的异常,主要包括 1. 异常 Exception 和 2. 异常 Error
- 针对开发中异常问题,大概记录的是:该板块是持续更新!!
- A. 详细崩溃日志信息 - B. 查看崩溃类信息 - C. 项目中异常分析 - D. 引发崩溃日志的流程分析 - F. 解决办法 - G. 其他延申
-
01. 崩溃 bug 日志总结 1
- 1.1 java.lang.UnsatisfiedLinkError 找不到 so 库异常
- 1.2 java.lang.IllegalStateException 非法状态异常
- 1.3 android.content.res.Resources$NotFoundException
- 1.4 java.lang.IllegalArgumentException 参数不匹配异常
- 1.5 IllegalStateException:Can’t compress a recycled bitmap
- 1.6 java.lang.NullPointerException 空指针异常
- 1.7 android.view.WindowManager$BadTokenException 异常
- 1.8 java.lang.ClassCastException 类转化异常
- 1.9 Toast 运行在子线程问题,handler 问题
-
02. 崩溃 bug 日志总结 2
- 1.1 java.lang.ClassNotFoundException 类找不到异常
- 1.2 java.util.concurrent.TimeoutException 连接超时崩溃
- 1.3 java.lang.NumberFormatException 格式转化错误
- 1.4 java.lang.IllegalStateException: Fragment not attached to Activity
- 1.5 ArrayIndexOutOfBoundsException 角标越界异常
- 1.6 IllegalAccessException 方法中构造方法权限异常
- 1.7 android.view.WindowManager$BadTokenException,dialog 弹窗异常
- 1.8 java.lang.NoClassDefFoundError 找不到类异常
- 1.9 Android 出现:Your project path contains non-ASCII characters.
-
03. 崩溃 bug 日志总结 3
- 1.1 OnErrorNotImplementedException【Can’t create handler inside thread that has not called Looper.prepare()】
- 1.2 adb.exe,start-server’ failed — run manually if necessary
- 1.3 java.lang.IllegalStateException: ExpectedBEGIN_OBJECT but was STRING at line 1 column 1 path $
- 1.4 android.content.ActivityNotFoundException: No Activity found to handle Intent
- 1.5 Package manager has died 导致崩溃
- 1.6 IllegalArgumentException View 添加窗口错误
- 1.7 IllegalStateException: Not allowed to start service Intent 异常崩溃
- 1.8 java.lang.IllegalStateException:Can not perform this action after onSaveInstanceState
- 1.9 在 Fragment 中通过 getActivity 找不到上下文,报 null 导致空指针异常
21. 经典总结
-
02.Aidl 进程间通信详细介绍
- Aidl 相关属性介绍,实际开发中案例操作,部分源码解析,客户端绑定服务端 service 原理
-
03.Scheme 协议详细介绍
- Scheme 协议格式解释,Scheme 如何使用,Scheme 在短信息中注意要点
-
04. 加密和解密
- 对称加密和非对称加密,加密和解密代码展示,非对称加密用途,RSA 非对称加解密案例代码分析,注意 RSA 加密填充方式,RSA 加密内容长度限制问题,加解密效率测试
-
05. 系统日志写入文件
- 自定义 log 工具类,一边打印日志一边写入文件,可以清除 7 天或者 n 天之前的日志文件
-
06. 数据序列化总结
- 序列化简单介绍,Parcelable 与 Serializable 的性能比较,性能测试方法分析
-
07. 关于 Activity 跳转动画大汇总
- 关于 Activity 实现切换的方式,使用 overridePendingTransition 方法实现 Activity 跳转动画,使用 ActivityOptions 切换动画实现 Activity 跳转动画
-
08.Android 屏幕适配方案
- 屏幕适配定义,相关重要的概念,Android 适配问题及本质,通配符适配困境,传统 dp 适配困境,今日头条适配方案等等
-
09.Android 编码规范
- 包命名,类和接口命名,方法的命名,变量命名,成员变量命名,常量命名,异常命名等等;注释,类注释,方法注释,类成员变量和常量注释等等;代码风格,简单实用的规范文档
-
[10. 上传提交代码到 jcenter]()
- 详细的方法流程步骤
-
11. 产品开发流程
- 属于整理性文章
-
13.Notification 通知栏
- https://github.com/yangchong2…
-
14. 轮询操作
- 简单理解就是 App 端每隔一定的时间重复请求的操作就叫做轮训请求,比如:App 端每隔一段时间上报一次定位信息,App 端每隔一段时间拉去一次用户状态等,这些应该都是轮训请求。
-
31.App 滑动标题栏渐变
- 目前改变渐变颜色方式,ScrollView 实现滑动渐变,RecyclerView 滑动渐变,AppBarLayout 滑动渐变
21. 经典总结(4 篇)
- 01.Android 技术架构
-
02. 设计靠谱 MVP 架构
- 什么是 MVP?什么是 MVC?开始进行 MVP 搭建,MVP 进阶处理逻辑
-
03.MVC 架构详细介绍
- MVC 原理介绍,Android 应用场景,MVC 最简单例子,通俗理解 MVC,MVC 缺陷分析
-
04.MVP 架构详细介绍
- MVP 简单介绍,MVP 工作原理,MVP 最简单例子,MVP 架构优缺点
23. 架构技术
-
01.Android 技术架构
- MVC 架构简单介绍,MVC 缺陷,MVP 架构简单介绍,如何设计一个靠谱 MVP 架构,以及 MVC 和 MVP 之间比较,结合实际代码分析,避免过度设计
-
02.Android 组件化开发实践和案例分享
- 为什么要组件化,创建组件化框架,组件化实践的开源项目,本博客已经授权鸿洋大神推荐!
-
03.ARouter 路由解析
- ARouter 路由框架一层层的解析,ARouter 的工作流程
-
11. 设计路由条件
- 为何需要路由?实现路由方式有哪些,这些方式各有何优缺点?使用注解实现路由需要具备的条件以及简单原理分析……
-
12 通过注解去实现路由跳转
- 自定义 Router 注解,Router 注解里有 path 和 group,这便是仿照 ARouter 对路由进行分组。然后看看注解生成的代码,手写路由跳转代码。
-
13 自定义路由 Processor 编译器
- Processor 介绍,重要方法,Element 的作用,修饰方法的注解和 ExecutableElement
-
14 利用 apt 生成路由映射文件
- 在 Activity 类上加上 @Router 注解之后,便可通过 apt 来生成对应的路由表,那么究竟是如何生成的代码呢?
- 在组件化开发中,有多个 module,为何要在 build.gradle 配置 moduleName,又是如何通过代码拿到 module 名称?
- process 处理方法如何生成代码的,又是如何写入具体的路径,写入文件的?
- 看完这篇文章,应该就能够理解上面这些问题呢!
-
15 路由框架的设计和初始化
- 编译期是在你的项目编译的时候,这个时候还没有开始打包,也就是你没有生成 apk 呢!路由框架在这个时期根据注解去扫描所有文件,然后生成路由映射文件。这些文件都会统一打包到 apk 里,app 运行时期做的东西也不少,但总而言之都是对映射信息的处理,如执行执行路由跳转等。那么如何设计框架呢?
- 生成的注解代码,又是如何把这些路由映射关系拿到手,或者说在什么时候拿到手比较合适?为何注解需要进行初始化操作?
- 如何得到得到路由表的类名,如何得到所有的 routerAddress—activityClass 映射关系?
-
[16 路由框架设计注意要点]()
- 需要注意哪些要点?
-
17 为何需要依赖注入
- 有哪些注入的方式可以解耦,你能想到多少?路由框架为何需要依赖注入?路由为何用注解进行依赖注入,而不是用反射方式注入,或者通过构造方法注入,或者通过接口方式注入?
-
18 Activity 属性注入
- 在跳转页面时,如何传递 intent 参数,或者如何实现跳转回调处理逻辑?
24.kotlin 学习
-
02.Kotlin 基本语法
- 常量和变量,函数,空安全,修饰符,运算符重载
-
03.Kotlin 类的扩展
- 使用 companion object,通过闭包减少接口类,object 对象声明
-
04.Kotlin 函数
- with 函数说明,apply 函数说明,内联函数,自定义访问器
-
06. 条件循环和区间
- If 表达式,When 表达式,for 循环,While 和 do/while 循环,Ranges
-
07.Kotlin 类介绍
- kotlin 如何表示类,默认是 finial 修饰,internal inner 是啥,匿名内部类,枚举类
-
08.Kotlin 构造函数
- 没有构造参数的类,主构造函数,次构造函数,主构造函数之 init 方法
-
09. 抽象类与接口
- 接口定义,抽象类定义,抽象方法与默认方法,抽象属性
-
10. 类继承和实现
- kotlin 类默认 finial,继承接口和实现抽象类,覆盖方法,属性覆盖,如何多个实现
- 11. 函数操作符
-
12. 扩展函数和属性
- 扩展函数,扩展属性,不可重写的扩展函数,拓展函数问题思考
-
13.Kotlin 可空性
- 可空性,安全调用运算符:?.,Elvis 运算符:?:,安全转换运算符:as?,非空断言:!!,let 函数说明
- 15.kotlin 字符串
-
16. 类型的检查
- 类型检查,智能转换,不安全的转换操作符,安全的转换操作符
-
18. 懒加载初始化
- by lazy 作用,lazy 使用场景,lateinit 作用,by lazy 和 lateinit 的区别
-
19. 集合和数组
- 只读集合与可变集合,集合与 Java,只读集合的可变性,
-
20.kotlin 中缀调用
- 中缀调用,解构声明
-
22.Lambda 表达式
- Lambda 作用,Lambda 的使用场景,在作用域中访问变量
-
23.kotlin 异常
- Kotlin 中异常处理的基本形式和 Java 类似
-
25.FindViewId 空指针
- 不用手写 findViewById,插件实现的原理分析,fragment 中注意事项
-
26.kotlin 协程使用
- 什么是协程,协程应用场景,线程和协程区别,协程用法,协程优势
-
30.kotlin 开销探索
- lazy()委托属性,伴生对象开销,基本类型数组
-
31.NPE 强规则
- Java 中判断方式,kotlin 中判空,导致 NPE 的场景
25.RecyclerView(25 篇)
-
00.RecyclerView 复杂封装库
- 几乎融合了该系列博客中绝大部分的知识点,欢迎一遍看博客一遍实践,一步步从简单实现功能强大的库
-
01.RecyclerView
- RecycleView 的结构,RecyclerView 简单用法介绍
-
02.Adapter
- RecyclerView.Adapter 扮演的角色,一般常用的重写方法说明,数据变更通知之观察者模式,查看.notifyChanged(); 源码
-
03.ViewHolder
- ViewHolder 的作用,如何理解对于 ViewHolder 对象的数量“够用”之后就停止调用 onCreateViewHolder 方法,ViewHolder 简单封装
-
04.LayoutManager
- LayoutManager 作用是什么?setLayoutManager 源码分析
-
05.SnapHelper
- SnapHelper 作用,什么是 Fling 操作,SnapHelper 类重要的方法,
- 06.ItemTouchHelper
-
07.SpanSizeLookup
- SpanSizeLookup 如何使用,同时包含列表,2 列的网格,3 列的网格如何优雅实现?
-
08.ItemDecoration
- ItemDecoration 的用途,addItemDecoration()源码分析
-
09.RecycledViewPool
- RecyclerViewPool 用于多个 RecyclerView 之间共享 View。
-
10.ItemAnimator
- 官方有一个默认 Item 动画类 DafaultItemAnimator, 其中 DefaultItemAnimator 继承了 SimpleItemAnimator, 在继承了 RecyclerView.ItemAnimator,它是如何实现动画呢?
-
11.RecyclerView 上拉加载
- 添加 recyclerView 的滑动事件,上拉加载分页数据,设置上拉加载的底部 footer 布局,显示和隐藏 footer 布局
-
12.RecyclerView 缓存原理
- RecyclerView 做性能优化要说复杂也复杂,比如说布局优化,缓存,预加载,复用池,刷新数据等等
-
13.SnapHelper 源码分析
- SnapHelper 旨在支持 RecyclerView 的对齐方式,也就是通过计算对齐 RecyclerView 中 TargetView 的指定点或者容器中的任何像素点。
-
16. 自定义 SnapHelper
- 自定义 SnapHelper
-
18.ItemTouchHelper 实现交互动画
- 需要自定义类实现 ItemTouchHelper.Callback 类
-
19. 自定义 ItemDecoration 分割线
- 需要自定义类实现 RecyclerView.ItemDecoration 类,并选择重写合适方法
-
21.RecyclerView 优化处理
- RecyclerView 滑动卡顿原因有哪些?如何解决嵌套布局滑动冲突?如何解决 RecyclerView 实现画廊卡顿?
-
22.RecyclerView 问题汇总
- getLayoutPosition()和 getAdapterPosition()的区别
-
23.RecyclerView 滑动冲突
- 01. 如何判断 RecyclerView 控件滑动到顶部和底部
- 02.RecyclerView 嵌套 RecyclerView 条目自动上滚的 Bug
- 03.ScrollView 嵌套 RecyclerView 滑动冲突
- 04.ViewPager 嵌套水平 RecyclerView 横向滑动到底后不滑动 ViewPager
- 05.RecyclerView 嵌套 RecyclerView 的滑动冲突问题
- 06.RecyclerView 使用 Glide 加载图片导致图片错乱问题解决
-
24.ScrollView 嵌套 RecyclerView 问题
- 要实现在 NestedScrollView 中嵌入一个或多个 RecyclerView,会出现滑动冲突,焦点抢占,显示不全等。如何处理?
-
25.RecyclerView 封装库和综合案例
- 自定义支持上拉加载更多【加载中,加载失败 [比如没有更多数据],加载异常[无网络],加载成功等多种状态】,下拉刷新,可以实现复杂的状态页面,支持自由切换状态【加载中,加载成功,加载失败,没网络等状态】的控件,拓展功能[支持长按拖拽,侧滑删除] 可以选择性添加。具体使用方法,可以直接参考 demo 案例。
-
27. RecyclerView 瀑布流优化
- 瀑布流实现,瀑布流上拉加载,给瀑布流设置分割线,如何避免刷新抖动,为何有时出现跳动,瀑布流图片优化,onBindViewHolder 优化,瀑布流 item 点击事件优化,Glide 加载优化,建议指定图片的宽高
26. 组件化(7 篇)
-
01. 为何组件化
- APP 迭代维护成本增高,APP 架构方式是单一工程模式,业务规模扩大,那就涉及到多人协作问题……
-
02. 组件化概念
- 什么是组件化,区分模块化与组件化,区分组件化和插件化,application 和 library,组件化优势好处,注意第三方 sdk 拆分问题
-
03. 组件化框架
- 传统 APP 架构图,组件化需要考虑问题,组件化架构图,组件通信是通过路由转发,业务组件的生命周期
-
05. 组件化案例
- 如何创建模块,如何建立依赖,如何统一配置文件,组件化的基础库包含哪些,组件和集成模式如何切换,组件初始化问题
-
06. 组件化填坑
- Fragment 通信难点,组件化解决重复依赖,业务组件联动导致耦合,组件化之数据库分离,组件化时资源名冲突,butterKnife 使用问题
-
07. 选择合适路由
- 选择那个开源路由库,阿里 Arouter 基础原理,使用 Arouter 注意事项
27. 路由框架
-
01. 设计路由条件
- 为何需要路由,实现路由方式,路由具备要点,ARouter 简单案例,路由实现原理
-
02. 通过注解实现路由跳转
- 首先看 ARouter 注解实现方案,自定义 Router 注解,查看生成的注解代码,倒推生成代码如何产生的
-
03. 生成路由映射文件
- 前沿介绍,定义注解处理器,如何拿到 module 名称,process 处理方法,生成的文件
-
04. 框架设计与初始化
- 看阿里 ARouter 整体设计,这样设计框架目的,仿照 ARouter 设计自己框架,为何需要初始化操作,初始化操作逻辑,如何得到得到路由表的类名
- 05. 路由参数传递接收
-
06. 依赖注入详解
- 什么是依赖注入,依赖注入案例,依赖查找和依赖注入,路由框架为何需要依赖注入,路由用什么方式注入
-
07.Activity 属性传递
- 依赖注入实现,注解实现分析,AbstractProcessor,如何注入属性,注入源码分析
其他介绍
01. 关于博客汇总链接
- 1. 技术博客汇总
- 2. 开源项目汇总
- 3. 生活博客汇总
- 4. 喜马拉雅音频汇总
- 5. 其他汇总
02. 关于我的博客
- github:https://github.com/yangchong211
- 知乎:https://www.zhihu.com/people/…
- 简书:http://www.jianshu.com/u/b7b2…
- csdn:http://my.csdn.net/m0_37700275
- 喜马拉雅听书:http://www.ximalaya.com/zhubo…
- 开源中国:https://my.oschina.net/zbj161…
- 泡在网上的日子:http://www.jcodecraeer.com/me…
- 邮箱:yangchong211@163.com
- 阿里云博客:https://yq.aliyun.com/users/a… 239.headeruserinfo.3.dT4bcV
- segmentfault 头条:https://segmentfault.com/u/xi…
- 掘金:https://juejin.im/user/593943…