Android博客大汇总

2次阅读

共计 19710 个字符,预计需要花费 50 分钟才能阅读完成。

目录介绍

  • 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…
正文完
 0