Android 自定义View的各种姿势1
Activity的显示之ViewRootImpl详解
Activity的显示之ViewRootImpl初探
Activity的显示之Window和View
Android系统的创世之初以及Activity的生命周期
图解Android事件分发机制(深入底层源码)
Android 自定义View的各种姿势2
Android 内存泄漏分析与解决
Android消息机制
Android Binder(也许是最容易理解的)
Android 彻底掌握Binder
Android序列化
Android Fragment详解
Android Fragment最佳实践
Android TabLayout+ViewPager+Fragment
Android ListView
Android RecyclerView
Android ListView与RecyclerView项目实战
Android 动画
Android 动画(续)
Android HTTP
首个hybird商业项目踩坑总结
Android并发编程 开篇
Android并发编程 多线程与锁
Android并发编程 原子类与并发容器
SystemServer启动过程(framework)
ListView复用View原理分析
Android创建绑定服务的3种方法
管理应用内存
DecorView显示过程
Activity setContentView过程分析
VelocityTracker用法
Android中View的测量measure过程
Android WatchDog原理分析
Android事件传递流程-从ViewRootImpl到View
ViewManager接口分析
Android平台开源log工具-Logger
Android进程优先级和oom_adj
使用gradle减少apk大小
Zyote启动之framework
常见的apk签名方式
Volley源码分析
SystemServer启动过程(native)
Context、Application和ActivityThread
AndroidManifest.xml中applicaiton属性介绍
Android播放器音乐信息乱码及其解决方法
Zygote启动之native
管理 Activity 生命周期
Android中ViewGroup的布局layout过程
GestureDetector用法
LeakCanary和常见内存泄漏场景
apk反编译与二次打包
Android性能分析工具Systrace
Android常见技巧
Activity launchMode和taskaffinity
Kotlin 知识梳理(13) – 运行时的泛型
Dagger2 知识梳理(3) – 使用 dependencies 和 @SubComponent 完成依赖注入
Android 知识梳理目录 – 好吧,这是一个很”干”的标题
面试算法知识梳理(11) – 二叉树算法第一部分
Glide 知识梳理(4) – 自定义animate
RxJava2 实战知识梳理(5) – 简单及进阶的轮询操作
性能优化工具知识梳理(5) – MAT
Kotlin 知识梳理(1) – Kotlin 基础
插件化知识梳理(2) – Small 框架之如何引入公共库插件
面试算法知识梳理(7) – 数组第四部分
图片压缩知识梳理(8) – WebP 使用详解
Activity 知识梳理(2) – Activity 栈
Framework 源码解析知识梳理(1) – 应用程序与 AMS 的通信实现
RxJava2 实战知识梳理(11) – 检测网络状态并自动重试请求
插件化知识梳理(7) – 类的动态加载入门
性能优化技巧知识梳理(1) – 布局优化
View 绘制体系知识梳理(2) – setContentView 源码解析
Architecture Components 知识梳理(1) – Lifecycle 示例&原理
Material Design 控件知识梳理(9) – TextInputLayout
设计模式知识梳理(5) – 结构型 – 外观模式
RecyclerView 知识梳理(2) – Adapter
零散知识点总结(3) – Android 状态栏知识点总结
性能优化技巧知识梳理(3) – 如何排查列表卡顿问题
RxJava2 实战知识梳理(14) – 在 token 过期时,刷新过期 token 并重新发起请求
多线程知识梳理(9) – ThreadLocal
面试算法知识梳理(8) – 二分查找算法及其变型
Android 数据存储知识梳理(1) – SQLiteOpenHelper 源码解析
Java&Android 基础知识梳理(5) – 类加载&对象实例化
Loader 知识梳理(3) – 自定义Loader
图片基础知识梳理(1) – ImageView 的 ScaleType 属性解析
插件化知识梳理(5) – Small 框架之如何不将插件打包到宿主中
RxJava2 实战知识梳理(8) – 使用 publish + merge 优化先加载缓存,再读取网络数据的请求过程
插件化知识梳理(4) – Small 框架之如何实现插件更新
Android 异步任务知识梳理(3) – AsyncQueryHandler 源码解析
Framework 源码解析知识梳理(3) – 应用进程之间的通信实现
Canvas&Paint 知识梳理(2) – Canvas 的保存和恢复
面试算法知识梳理(9) – 链表算法第一部分
Material Design 控件知识梳理(5) – DrawerLayout && NavigationView
Material Design 控件知识梳理(2) – AppBarLayout & CollapsingToolbarLayout
Kotlin 知识梳理(12) – 泛型类型参数
RxJava2 实战知识梳理(6) – 基于错误类型的重试请求
Fragment 知识梳理(1) – Fragment 源码解析
Service 知识梳理(1) – Service 问题整理
Loader 知识梳理(1) – LoaderManager初探
Loader 知识梳理(2) – initLoader和restartLoader的区别
Architecture Components 知识梳理(3) – ViewModel 示例
OkHttp 知识梳理(4) – OkHttp 之缓存源码解析
RxJava2 实战知识梳理(1) – 后台执行耗时操作,实时通知 UI 更新
RxJava2 实战知识梳理(15) – 实现一个简单的 MVP + RxJava + Retrofit 应用
RxJava2 实战知识梳理(13) – 如何使得错误发生时不自动停止订阅关系
Canvas&Paint 知识梳理(1) – Canvas 基础
Kotlin 知识梳理(3) – 类、对象和接口
零散知识点总结(2) – Ubuntu下切换JDK版本
Java&Android 基础知识梳理(3) – 内存区域
Dagger2 知识梳理(2) – @Qulifier 和 @Named 解决依赖注入迷失
Java&Android 基础知识梳理(10) – SparseArray 源码解析
多线程知识梳理(4) – synchronized 三部曲之等待/通知模型
Java&Android 基础知识梳理(13) – 反射
Android 数据存储知识梳理(2) – Android存储目录
RecyclerView 知识梳理(4) – ItemDecoration
Canvas&Paint 知识梳理(6) – 绘制路线 Path 基本用法
性能优化工具知识梳理(3) – 调试GPU过度绘制 & GPU呈现模式分析
图片基础知识梳理(3) – Bitmap&BitmapFactory 解析
Activity 知识梳理(1) – Activity生命周期
Kotlin 知识梳理(11) – 内联函数
Java&Android 基础知识梳理(8) – 容器类
View 绘制体系知识梳理(8) – obtainStyledAttributes 详解
组件化知识梳理(3) – Arouter 源码分析之运行时 SDK
Fragment 知识梳理(2) – Fragment 状态保存和恢复
组件化知识梳理(2) – Arouter 源码分析之 Complier SDK
我是如何准备 Android 技术面试的~
Kotlin 知识梳理(6) – Kotlin 的可空性
Glide 知识梳理(1) – 基本用法
动画体系知识梳理(2) – 转场动画 ContentTransition 实践篇
Android 知识梳理目录 – To do
面试算法知识梳理(6) – 数组第三部分
View 事件传递体系知识梳理(1) – 事件分发机制
图片压缩知识梳理(9) – 选择合适的图片格式
面试算法知识梳理(3) – 字符串算法第二部分
面试算法知识梳理(2) – 字符串算法第一部分
插件化知识梳理(6) – Small 源码分析之 Hook 原理
面试算法知识梳理(4) – 数组第一部分
设计模式知识梳理(2) – 结构型 – 桥接模式
RxJava 知识梳理(1) – RxJava 基本思想
面试算法知识梳理(1) – 排序算法
View 绘制体系知识梳理(3) – 绘制流程之 Measure 详解
Fragment 知识梳理(4) – FragmentPagerAdapter 和 FragmentStatePagerAdapter 解析
OkHttp 知识梳理(2) – OkHttp 源码解析之异步请求 & 线程调度
Kotlin 知识梳理(7) – Kotlin 的类型系统
插件化知识梳理(9) – 资源的动态加载示例及源码分析
Kotlin 知识梳理(9) – 委托属性
Android 面试文档分享
NDK 知识梳理(2) – 使用 CMake 进行 NDK 开发之如何编写 CMakeLists.txt 脚本
多线程知识梳理(6) – 线程池四部曲之 ThreadPoolExecutor
多线程知识梳理(5) – 线程池四部曲之 Executor 框架
Java&Android 基础知识梳理(9) – LruCache 源码解析
多线程知识梳理(7) – ConcurrentHashMap 实现原理
多线程知识梳理(2) – synchronized 三部曲之基本使用
性能优化工具知识梳理(4) – Hierarchy Viewer
架构设计知识梳理(2) – Flux
RxJava2 实战知识梳理(3) – 优化搜索联想功能
设计模式知识梳理(6) – 结构型 – 享元模式
Java&Android 基础知识梳理(12) – 泛型
RxJava2 实战知识梳理(4) – 结合 Retrofit 请求新闻资讯
Android 版本适配问题
性能优化技巧知识梳理(2) – 内存优化
Retrofit 知识梳理(1) – 流程分析
Volley 知识梳理 – Volley解析
NDK 知识梳理(1) – 使用 CMake 进行 NDK 开发之初体验
Activity 知识梳理(3) – Activity状态保存和恢复
多线程知识梳理(10) – 死锁的概念
OkHttp 知识梳理(3) – OkHttp 之缓存基础
RxJava2 实战知识梳理(9) – 使用 timer/interval/delay 实现任务调度
View 绘制体系知识梳理(4) – 绘制过程之 Layout 详解
插件化知识梳理(8) – 类的动态加载源码分析
Material Design 控件知识梳理(6) – Snackbar
Canvas&Paint 知识梳理(5) – Paint#setShader
Canvas&Paint 知识梳理(3) – 颜色合成 Paint#setColorFilter
Java&Android 基础知识梳理(7) – Android 虚拟机
Kotlin 知识梳理(4) – 数据类、类委托 及 object 关键字
View 事件传递体系知识梳理(2) – 嵌套滑动
Material Design 控件知识梳理(8) – TabLayout
RxJava2 实战知识梳理(2) – 计算一段时间内数据的平均值
Retrofit 知识梳理(2) – Retrofit 动态代理内部实现
Framework 源码解析知识梳理(7) – Handler 的 async 标志位
组件化知识梳理(1) – Arouter 的基本使用
图片压缩知识梳理(1) – PNG 原理
Material Design 控件知识梳理(4) – FloatingActionButton
Glide 知识梳理(6) – Glide 源码解析之流程剖析
RxJava2 实战知识梳理(12) – 实战讲解 publish & replay & share & refCount & autoConnect
图片基础知识梳理(2) – Bitmap 占用内存分析
View 绘制体系知识梳理(6) – 绘制过程之 requestLayout 和 invalidate 详解
面试算法知识梳理(14) – 数字算法
设计模式知识梳理(7) – 结构型 – 代理模式
View 绘制体系知识梳理(5) – 绘制过程之 Draw 详解
架构设计知识梳理(1) – Dagger2
Broadcast 知识梳理(1) – BroadcastReceiver 基本概念
动画体系知识梳理(1) – 转场动画 ContentTransition 理论篇
Kotlin 知识梳理(5) – lambda 表达式和成员引用
Android 异步任务知识梳理(1) – AsyncTask 源码解析
Dagger2 知识梳理(1) – Dagger2 依赖注入的两种方式
性能优化工具知识梳理(8) – Lint
Kotlin 知识梳理(10) – 高阶函数:Lambda 作为形参或返回值
Java&Android 基础知识梳理(2) – 序列化
Weex 知识梳理(1) – 环境搭建
Kotlin 知识梳理(8) – 运算符重载及其他约定
View 绘制体系知识梳理(1) – LayoutInflater#inflate 源码解析
插件化知识梳理(10) – Service 插件化实现及原理
零散知识点总结(1) – Gradle 使用配置总结
Canvas&Paint 知识梳理(4) – 图像合成 Paint#setXfermode
面试算法知识梳理(12) – 二叉树算法第二部分
性能优化工具知识梳理(2) – Systrace
图片压缩知识梳理(0) – 图片压缩学习计划
Java&Android 基础知识梳理(4) – 垃圾收集器与内存分配策略
Java&Android 基础知识梳理(0) – Java 基础知识大纲
Android 异步任务知识梳理(2) – HandlerThread 源码解析
性能优化工具知识梳理(7) – LeakCanary
性能优化工具知识梳理(1) – TraceView
面试算法知识梳理(13) – 二叉树算法第三部分
多线程知识梳理(8) – volatile 关键字
RxJava 知识梳理(3) – RxJava2 基础知识小结
Java&Android 基础知识梳理(6) – 字节输入输出流
Android 数据存储知识梳理(4) – 数据库升级操作的处理策略
Fragment 知识梳理(3) – FragmentPagerAdapter 和 FragmentStatePagerAdapter 的数据更新问题
Material Design 控件知识梳理(1) – Android Design Support Library 是什么
图片压缩知识梳理(5) – VectorDrawable 简介
图片压缩知识梳理(2) – 减小 PNG 大小
Android 数据存储知识梳理(3) – SharedPreference 源码解析
图片压缩知识梳理(6) – VectorDrawable 及 AnimatedVectorDrawable 使用详解
设计模式知识梳理(3) – 结构型 – 组合模式
Java&Android 基础知识梳理(11) – 浅拷贝 Vs 深拷贝
Dagger2 知识梳理(4) – @Scope 注解的使用
RxJava 知识梳理(2) – RxJava2 操作符实战
Glide 知识梳理(3) – 自定义transform
面试算法知识梳理(10) – 二叉查找树
面试算法知识梳理(5) – 数组第二部分
Material Design 控件知识梳理(3) – BottomSheet && BottomSheetDialog && BottomSheetDialogFragment
性能优化工具知识梳理(6) – Memory Monitor & Heap Viewer & Allocation Tracker
不“误”正业地弄了个人博客,欢迎访问
Framework 源码解析知识梳理(4) – 从源码角度谈谈 Handler 的应用
Java&Android 基础知识梳理(1) – 注解
RxJava2 实战知识梳理(7) – 基于 combineLatest 实现的输入表单验证
Material Design 控件知识梳理(7) – BottomNavigationBar
Kotlin 知识梳理(2) – 函数的定义与调用
OkHttp 知识梳理(1) – OkHttp 源码解析之入门
RecyclerView 知识梳理(1) – 综述
插件化知识梳理(3) – Small 框架之宿主分身
RxJava2 实战知识梳理(10) – 屏幕旋转导致 Activity 重建时恢复任务
RecyclerView 知识梳理(3) – LayoutManager
Glide 知识梳理(5) – 自定义GlideModule
多线程知识梳理(3) – synchronized 三部曲之锁优化
Architecture Components 知识梳理(2) – LiveData 示例
Glide 知识梳理(2) – 自定义Target
Framework 源码解析知识梳理(2) – 应用进程与 WMS 的通信实现
View 绘制体系知识梳理(7) – getMeasuredWidth 和 getWidth 的区别
多线程知识梳理(1) – 并发编程的艺术笔记
设计模式知识梳理(4) – 结构型 – 装饰模式
RecyclerView 知识梳理(5) – ItemTouchHelper
组件化知识梳理(4) – IOC & AOP 思想在 Arouter 中的应用
插件化知识梳理(1) – Small 框架之如何引入应用插件
设计模式知识梳理(1) – 结构型 – 适配器模式
奇技淫巧之-Android监听键盘弹出与隐藏事件
RxImagePicker:从零实现灵活且可高度定制的Android图片选择架构
Android6.0权限适配及兼容库的实现
MVP 笔记
【Android】快速开发偷懒必备(二) 支持DataBinding啦~爽炸,一行实现花式列表
逆向思考,优化/重构你的代码逻辑
Android自定义ClockView实现时钟效果
Android 实现无网络页面切换
完全自定义控件-自定义绚丽水波纹效果
开发工具总结(8)之图文并茂全面总结上百个AS好用的插件(下)
glide 一个强大的图片加载框架
听说你Binder机制学的不错,来面试下这几个问题(二)
Android——MVP——封装一个通用的Module
Android适配全面总结(三)—-ROM适配
Android 刘海屏适配总结
谷歌Flutter1.0正式版发布
Android应用坐标系统全面详解
活在android之观察者模式
Linux环境下Android开发常用命令
Android 拍照获取缩略图以及完整图片(适配androidN)
[译]使用MVI打造响应式APP(一):Model到底是什么
Android实现沉浸模式的体验
Android Handle解析
一个根据代码自动生成UML的插件,助你看源码事半功倍
Groovy学习笔记4:特殊注解
观察者模式学习
OkHttp基础学习(五),文件上传
躺着过坑—断电导致AVD和SDK Manager无法正常启动
Android 一起来看看 ThreadLocal
万能的dialog库(包括类似popwindow效果)
Android 自定义View学习(十四)——View滑动学习
手把手教你从零开始做一个好看的 APP – Day four
Android——RecyclerView入门学习之DiffUtil(四)
一次使用Kotlin实现酷炫多选操作的尝试
Android 带你撸一个好玩的 DoodleView(涂鸦)
十分钟了解Android触摸事件原理(InputManagerService)
Android 自定义view,画图板练习
Android 打造一个丝滑的自动轮播控件
Android Camera 系列(三)Camera API 详解
设计模式(一) 工厂模式 五种写法总结
我的 2017
RxJava常用操作符
Android 自定义view相关
为你的Android Studio打造帅气的LogCat配色
编辑距离 (Levenshtein Distance算法)
Android 自定义View学习(十三)——View触控事件学习
Android DEPPLINK、APPLink原理简析
不要打破链式调用!一个极低成本的RxJava全局Error处理方案
Flutter基础篇(7)– Flutter更新错误全面解决方案(图文+视频讲解)
Android 读取联系人数据库
简单图片加载框架的打造-(了解如何设计一个图片加载框架)
Android 解锁 Gradle 依赖新姿势
Android官方架构组件DataBinding双向绑定篇: 观察者模式的殊途同归
当Android遇到单例模式
Http基础知识学习(一)
面试必备:LinkedList源码解析(JDK8)
[译]Android开发从Dagger2迁移至Kodein的感受
SQL定义
Material Design学习:DrawerLayout+NavigationView
Android窗口管理分析(1):View如何绘制到屏幕上的主观理解
Android动手实现一个侧滑删除控件,支持Recyclerview
使用友盟分享和登陆以及使用时要注意的坑
活在Android之Builder模式
OkHttp基础学习(一),Get请求
Linux工具命令之crontab
DiskLruCache简介
完全自定义控件-简单环形进度条制作
手把手教你从零开始做一个好看的 APP – Day five
Flutter基础篇(1)– 跨平台开发框架和工具集锦
Android——RecyclerView入门学习之ItemDecoration(一)
Android硬件加速(二)-RenderThread与OpenGL GPU渲染
Flutter进阶篇(5)– 使用Flutter创建插件详解并发布到Pub库
Java多边型无序点排序(地图绘制多边形)
Gradle学习笔记(一)基本配置
gson解析assets目录下的json文件(给新手看的)
仿淘宝、京东拖拽商品详情(可嵌套ViewPager、ListView、WebView、FragmentTabhost)
Swift 与 Kotlin 的简单对比,简直是太像了
RxJava——基础学习(六),过滤操作符
Android官方架构组件Paging-Ex:为分页列表添加Header和Footer
Android匿名共享内存(Ashmem)原理
Android 开发中零散知识点记录
正则表达式学习(上)
理解RxJava(四)Subject用法及原理分析
Android 一起来看看面试必问的消息机制
[译]Java将Powermock和Mockito搭配进行单元测试
Android内容服务ContentService原理浅析
程序猿Skr —– Flutter之歌
Android Bitmap变迁与原理解析(4.x-8.x)
Material Design学习:CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout
告别Dagger2模板代码:DaggerAndroid原理解析
教你打造Android揭面水波动画库-AnimationHelper
Flutter 开发遇到问题
Android——CoordinatorLayout之Behavior入门学习(下)
Android状态模式的几种应用场景
简单几行代码让ViewPager实现垂直滑动效果
Android 一起来看看 HttpURLConnection 和 HttpClient 的区别
Zxing二维码扫描和那些坑
我的 2018
认识Concurrent包中的 CAS
Android自定义View:MeasureSpec的真正意义与View大小控制
Android中gradle的implementation和api指令的区别
Android meta-data知识介绍及应用
从几行代码学习Java类加载机制-从懵逼到放弃
Android面试:主线程中的Looper.loop()一直无限循环为什么不会造成ANR?
闲散整理,带你走进Android短信源码
Android在string.xml中加粗文字
Java 打印心形
Android 计时的两种思路
Android中的内存泄漏和内存溢出.md
全面总结侧滑菜单的5种实现方式
JNI源码分析 (并实现JNI动态注册)
Material Design学习:ToolBar 开发使用简介
CalendarListView 日历列表
Android 撸起袖子,自己封装 DialogFragment
TitleItemDecoration
最全的BAT大厂面试题整理
一行Java代码实现RecyclerView的Adapter?一行都不需要!
程序员漫画系列-Linux内核里面的那些小企鹅们
Android 动画基础知识学习(上)
Activity生命周期函数理解
手把手教你从零开始做一个好看的 APP – Day one
设计模式(二) 三种适配器模式 总结和使用场景
程序员在简书|一个小城市,小公司的小程序员
程序员的江湖,黑话一定要牢记
Android 神兵利器Dagger2使用详解(三)MVP架构下的使用
2017年你绝对想尝试的25个新安卓库(持续更新中…)
小知识-Android一个应用多个图标的几种实现方式
【游客必看】 博主所有文章目录
Android 自定义View学习(二)——开始了解Canvas和Paint
Java编程思想第21章并发读书笔记(下)
常用Java并发数据结构
Flutter进阶篇(4)– Flutter的Future异步详解
教你如何最快写出酷炫的dialog对话框
开发工具总结(5)之Markdown语法图文全面详解及其工具介绍
AndroidStudio基本debug调试技巧纵览
动态图解&实例 ConstraintLayout Chain
Android 一起来看看 7.0 的新特性 FileProvider
Android 一个另类的显示圆形图片方式
Android8.0适配前台定位服务service
Android 实习 | 如何在春招中拿到满意的 offer
Android浅析SurfaceView
Gradle学习笔记(三)管理依赖
OkHttp基础学习(四),无网络读取本地缓存,有错误,待改正
Android 滑动选择身高体重控件——RulerView
10分钟学会ikvStockChart制作K线图(股票走势图)
Android —— 微信Sqlite数据库框架WCDB学习
当Android遇见工厂模式
Android 自定义View学习(一)——准备
WebView深度学习(一)之WebView的基本使用以及Android和js的交互
一个工程带你学会简单使用RxJava+Retrofit
Android 简易签名板
【Android】你可能不知道的Support(一) 0步自动定向刷新SortedList
【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView
优化Android Studio/Gradle构建
针对Android中类的重载方法很多时的几种优化解决方案
几步教你怎么写MVP
扫码体验