Skip to content

Latest commit

 

History

History
759 lines (655 loc) · 81.8 KB

02.Android博客大汇总.md

File metadata and controls

759 lines (655 loc) · 81.8 KB

目录介绍

  • 01.基础组件(19篇)
  • 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(7篇)
  • 12.网络相关(7篇)
  • 13.注解(14篇)
  • 14.音视频(13篇)
  • 15.优化相关(19篇)
  • 16.流行框架(23篇)
  • 17.数据处理(9篇)
  • 18.framwork
  • 19.复杂控件(16篇)
  • 20.Bug管理(6篇)
  • 21.经典总结(16篇)
  • 23.架构技术(13篇)
  • 24.kotlin(29篇)
  • 25.RecyclerView(32篇)
  • 26.组件化(7篇)
  • 27.路由框架(7篇)

好消息

  • 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢!
  • 链接地址:https://github.com/yangchong211/YCBlogs
  • 如果觉得好,可以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回退栈是如何实现的
  • 26.Intent传递大数据
    • 在Activity间使用Intent传递List含有大量序列化的对象的时候,或者传递较大bitmap等较大量数据的时候会引起页面卡顿。
  • 27.Intent深入分析
    • Intent可以传递多大数据,如何解决大数据传递思路分析说明
  • 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原理

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基础
    • 常用的基础介绍,Android调用Js,Js调用Android,WebView.loadUrl(url)流程,js的调用时机分析,清除缓存数据方式有哪些,如何使用DeepLink
  • 02.开源库原理分析
    • WebView加载html页面,加载WebViewJavascriptBridge.js,分析WebViewJavascriptBridge.js,页面Html注册”functionInJs”方法,“functionInJs”执行结果回传Java
  • 03.Android的js交互
    • Android调用js,Js调用Android
  • 04.WebView问题
    • 提前初始化WebView必要性,x5加载office资源,WebView播放视频问题,使用scheme协议打开链接风险,关于js注入时机修改,如何保证js安全性,webView加载网页不显示图片,WebView嵌套ScrollView问题,页面滑动期间不渲染/执行,被运营商劫持和注入问题,使用loadData加载html乱码,
  • 05.WebView优化
    • 加快加载webView中的图片资源,自定义加载异常error的状态页面,WebView加载证书错误,DNS采用和客户端API相同的域名,后台无法释放js导致发热耗电,WebView密码明文存储漏洞优化
  • 06.外部链接风险
    • 网页打开app方式,Scheme协议打开app ,如何设置白名单操作

12.网络相关

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.音视频

15.优化相关(19篇)

  • 01.内存泄漏优化
    • 常见的内存泄漏场景分析,原理分析,及解决办法,比如:错误使用单例造成的内存泄漏,错误使用静态变量,Handler使用不当造成的内存泄漏,非静态内部类创建静态实例造成的内存泄漏,资源未关闭造成的内存泄漏,动画资源未释放导致内存泄漏等等。
  • 02.网络优化
    • 图片分类优化,获取网络数据优化,网络请求异常拦截优化
  • 03.布局优化
    • 常见布局优化方法,使用include标签,ViewStub深度解析,视图层级
  • 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

16.流行框架

  • 01.Rx基础介绍
    • RxJava事件类型,RxJava的消息订阅步骤,如何切断消息,Rx调度/切换
  • 03.Rx实际应用
    • 最普通的案例分析,网络请求嵌套回调,合并网络请求数据,重复发送网络请求,有条件网络请求轮询,联合判断多个事件
  • 05.Rx源码分析1
    • observable创建过程,observer创建过程,subscribe订阅过程,disposable.dispose()切断消息,线程切换源码
  • 08.Glide基础介绍
    • with()绑定生命周期,load()加载数据,缓存机制使用,设置加载动画,指定图片加载格式
  • 09.一般图片加载过程
    • 加载图片场景,从网络请求拉取图片,图片压缩,图片交换处理,图片三级缓存,同步和异步加载
  • 10.Glide低内存优化
    • Recyclerview使用Glide加载大量图片导致内存溢出,适当避免使用圆角的自定义ImageView控件,配置好TrimMemory和LowMemory
  • 11.Glide对象池
    • 对象池Pools优化频繁创建和销毁类,Glide使用对象池的机制,对这种频繁需要创建和销毁的对象保存在一个对象池中。每次用到该对象时,就取对象池空闲的对象,并对它进行初始化操作,从而提高框架的性能。
  • 13.Json简单介绍
    • 原生生成和解析json ,String生成的json数据,JsonObject生成的数据,将集合生成json数据, 解析简单的json数据
  • 14.Json基础使用
    • 数组和字符串处理,集合和字符串处理,对象和字符串处理,序列化和反序列化
  • 15.Json高级用法
    • 属性重命名,字段过滤,个性化配置,TypeAdapter,JsonSerializer和JsonDeserializer,TypeAdapterFactory
  • 18.EventBus基础用法
    • EventBus的三要素,EventBus的四种ThreadMode(线程模型),最简单的使用,内存泄漏分析,使用注意要点
  • 19.EventBus源码分析
    • EventBus注册源码解析 ,EventBus事件分发解析 ,EventBus取消注册解析 ,总结一下EventBus的工作原理
  • 20.ARouter基础介绍
    • 原生跳转实现,实现组件跳转方式,跨进程组件通信,ARouter的工作流程 ,Interceptor拦截器,数据传输和自动注入
  • 22.Vlayout基础使用
    • Vlayout使用详细介绍
  • 25.Retrofit基本使用
    • 注解的种类 ,Retrofit相关请求参数 ,Retrofit与RxJava结合 ,OkHttpClient ,Form表单提交与multipart/form-data
  • 26.Retrofit源码分析
    • Retrofit的创建流程源码分析 ,创建ServiceMethod流程源码分析 ,OkHttpCall的创建源码分析

17.数据处理

  • 05.序列化介绍
    • 序列化的概念,序列化作用,序列化的目的
  • 06.序列化方式
    • 序列化的方式分类,Serializable的使用 ,Serializable简单实现,Parcelable的使用 ,注意事项记录
  • 07.序列化性能
    • Serializable性能分析,Parcelable性能分析,性能比较总结描述,性能测试方法分析,两种如何选择
  • 08.序列化方案
    • 数据的序列化方案
  • 10.Sp深入分析
    • 对于SharedPreferences你觉得有什么优缺点?
  • 11.Sp源码分析
    • 如何获取sp,SharedPreferencesImpl构造,edit方法源码,put和get方法源码 ,commit和apply
  • 12.Sp卡顿分析
    • app卡顿日志,看一下commit方法,apply造成的卡顿
  • 13.Sp存储效率
    • 通过案例测试来看看sp的存储效率,commit和apply究竟有多大的区别

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
  • 32.仿抖音上下滑动分页视频
    • 用ViewPager实现 ,用RecyclerView实现 ,ViewPager改变滑动速率,PagerSnapHelper注意点,自定义LayoutManager注意点,翻页卡顿优化分析,上拉很快翻页黑屏
  • 31.RecyclerView崩溃
    • Inconsistency detected崩溃

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.经典总结

21.经典总结(4篇)

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学习

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.关于博客汇总链接

02.关于我的博客