文章目录
「代码说」:一个专注于 Android 技术细节拆解的分享号,欢迎关注!
将之前的文章进行了分类整理,方便阅读,持续整理中…
一、Jetpack & Jetpack Compose
- Android Jetpack系列之Lifecycle
- Android | Jetpack Lifecycle 库新旧版本使用姿势对比
- Android Jetpack系列之LiveData
- Android Jetpack LiveData实现消息总线
- Android Jetpack系列之ViewModel
- Android Jetpack系列之MVVM使用及封装
- Android Jetpack系列之MVVM使用及封装(续)
- Android Jetpack系列之MVI架构
- Android Jetpack系列之DataStore
Jetpack Compose
- 对于Android开发,Jetpack Compose真的要开始学起来了?
- Jetpack Compose | 在AGP7.0以下、已有项目中集成使用
- Jetpack Compose | State状态管理及界面刷新
- Jetpack Compose | Modifier常用修饰符的使用(一)
- Jetpack Compose | Modifier手势相关修饰符的使用(二)
二、Kotlin
协程 & Flow:
- Kotlin | 深入理解协程
- Kotlin | Flow数据流详解
- Kotlin | Flow数据流的几种使用场景
- Kotlin | 基于协程Flow实现一个倒计时功能
- Kotlin | 协程async、await机制实现串行&并行请求
类 & 函数 & 表达式
- 提高开发效率!5个对开发者有用的Kotlin扩展函数
- Kotlin | 利用扩展函数转换对象的一个小技巧
- Kotlin | 高阶函数reduce()、fold()详解
- Kotlin | 内联函数inline、noinline、crossinline
- Kotlin | 使用vararg可变参数
- Kotlin | 作用域函数之let、with、run、also、apply的使用
- Kotlin | @JvmOverloads、@JvmStatic、@JvmField、@JvmInline等注解使用总结
- Kotlin | data数据类、copy()函数、sealed密封类
- Kotlin | Inner内部类 vs 嵌套类(静态内部类)
- Kotlin | 正确的使用Handler
- Kotlin | 10分钟搞定by委托机制、 Kotlin | 利用by委托机制封装SharedPreference
- Kotlin中使用Java数据类时引发的一个Bug
- Kotlin | 在for、forEach循环中正确的使用break、continue
- Java & Kotlin类型检查instanceof、isAssignableFrom() 与 is、isSubclassOf()
集合
三、View & 事件传递 & 动画
- Android | 扩大View点击区域的几种方式
- Android 深入理解View.post()获取宽高、Window加载View原理
- 重温基础:LayoutInflater.inflate(resource, root, attachToRoot)参数解析
Spannable:
- 超能力文本:探索Span机制的多彩世界(一)
- 超能力文本:探索Span机制的多彩世界(二)
- 超能力文本:TextView.setText(CharSequence, BufferType)中的秘密
- 超能力文本:两个示例学会自定义Span
RecyclerView
- Android | 深入理解RecyclerView缓存机制
- Android | 高效复用:RecyclerView内部嵌套横向列表时的优化技巧
- Android 深入理解ViewPager2原理及其实践(上篇)
- Android 深入理解ViewPager2原理及其实践(下篇)
- Android仿淘宝、京东Banner滑动查看图文详情
- [转]RecyclerView、View的onAttachedToWindow和onDetachedFromWindow调用时
- Android | 利用ItemDecoration绘制RecyclerView分割线
- Android | RecyclerView + OverScroller + TouchEvent实现左滑查看更多
- Android | 一种简单的方式来实现弹幕效果
自定义View相关
- Android自定义View中的常用方法(距离、位置、点击事件)
- Android View滑动相关的基础知识点
- Android自定义View工具:Paint&Canvas(上)
- Android自定义View工具:Paint&Canvas(下)
- Android Canvas之Path操作
- Android Path测量工具之PathMeasure
- Android ViewTreeObserver使用总结及获得View宽高的几种方法
- [转]Android深入理解文字绘制:FontMetrics字体测量及其TextPaint介绍
- [转]Android 全面屏体验
- Android 高仿QQ侧滑菜单
- Android WindowManger实现桌面悬浮窗
MotionLayout
- Android | MotionLayout入门级使用教程(一)
- Android | MotionLayout动画之KeyFrameSet关键帧详解(二)
- Android | MotionLayout 动画示例:打造动态交互菜单示例
ConstraintLayout
- ConstraintLayout中设置负值的margin失效了?不妨换一种思路来实现!
- ConstraintLayout 中的ImageFilterView探索:处理图片圆角、亮度、饱和度、图片重叠等
- ConstraintLayout之layout_constraintDimensionRatio属性详解
- [转]ConstraintLayout(约束布局)使用详解
图片处理
- Android 图像合成:玩转 PorterDuff.Mode 的 18 种混合模式
- Android Xfermode应用:实现炫酷刮刮卡效果
- Android Xfermode应用:实现圆角矩形、圆形等图片裁切
- Android Paint.Xfermode及离屏绘制
- 玩转ShapeableImageView:实现灵活的自定义形状与边框效果
- Android | 多种方式实现图片圆角矩形和圆形效果
- Android | 多种方式实现图片圆角矩形和圆形效果(续)
- MaterialShapeDrawable vs CardView:两种方式实现阴影效果对比
- 玩转 ImageView.ScaleType:图片的缩放与裁剪技巧
- Android | 通过 layer-list 设置默认加载错误图片
- Android | 屏幕信息DisplayMetrics与不同DPI设备的资源加载
- Android | Bitmap基础知识点整理
- Android | 图片分辨率跟像素密度是一回事吗?
事件传递
动画相关
性能优化
- Android 布局优化:利用 ViewStub 和 Merge 提升性能、Android | ViewStub原理解析
- [转]Android性能优化系列:VSync、Choreographer 和 Render Thread
四、多线程相关
- JUC系列学习(一):线程池Executor框架及其实现ThreadPoolExecutor
- JUC系列学习(二):AbstractQueuedSynchronizer同步器框架及相关实现类
- JUC系列学习(三):ReentrantLock的使用、源码解析及与Synchronized的异同
- JUC系列学习(四):线程池阻塞队列BlockingQueue及其相关实现
- JUC系列学习(五):CountDownLatch、Semaphore、CyclicBarrier的使用及源码解析
- JUC系列学习(六):ReentrantReadWriteLock的使用及源码解析
- Java多个线程顺序循环执行的几种实现方式
- Java生产者、消费者模式的几种实现方式
- Java线程基础知识点整理
- Android中Callable、Future、FutureTask的概念以及几种线程池的使用
五、存储相关
- Android本地存储之SharedPreferences源码解析
- Android 性能优化篇之SharedPreferences使用优化
- Android Jetpack系列之DataStore
- Android | 数据库Sqlite的基本用法及升级策略
- Android | 本地存储的几种方式
- Android | 内存缓存LruCache使用及其源码解析
- Android | 序列化Serializable/Parcelable 使用总结
六、Gradle相关
- Gradle理论与实践一:Gradle入门
- Gradle理论与实践二:Groovy介绍
- Gradle理论与实践三:Gradle构建脚本基础
- Gradle理论与实践四:自定义Gradle插件
- Gradle配置中subprojects 和 allprojects 的区别
- [转]Gradle构建生命周期及Hook技术
- [转]Gradle | Task进阶学习
- [转]Gradle | Project进阶学习
- [转]Gradle | Extension扩展详解
七、数据结构与算法 & 设计模式
- Java | 内存模型、GC Roots可达性分析、垃圾回收机制
- Java | HashMap、ConcurrentHashMap、LinkedHashMap使用及源码解析
- “造物者”之道:五分钟重温工厂模式及示例分享
八、Window & Android Studio & 混淆等
- Android | launchMode启动模式详解
- startActivityForResult被标记为废弃?Activity Result API闪亮登场!
- Android | Context全解析:原理、类型与使用指南
- 深入解析Activity生命周期:方法回调时机与AMS交互机制
- Android | MutableContextWrapper详解
- Android | Configuration详解及其新旧更新方式对比
- Fragment.setUserVisibleHint()懒加载过时问题优化
- Android | IdleHandler的使用分析
- Android 封装一个通用的PopupWindow
Android Studio
- Android Studio | 通过SSH Key上传代码到Github
- 修改了Android Studio 中的这两个面板配置后,代码写的更舒服了~
- Android Studio 中默认编码格式ISO-8859-1 设置为UTF-8
- Android Studio | 使用Database Inspector 查看数据库 .db 文件,太方便了!
其他