目录介绍
- 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篇)
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原理
-
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基础
- 常用的基础介绍,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.网络相关
-
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
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.经典总结
-
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通知栏
-
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,如何注入属性,注入源码分析