自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android的专栏

聚焦Kotlin高阶特性与当前主流Android开发架构,包含协程底层源码拆解、Flow全场景使用、MVVM架构落地、Jetpack组件深度适配等内容。

  • 博客(38)
  • 资源 (4)
  • 收藏
  • 关注

原创 AudioTrack 深度解析:从原理到实战

Android 里播声音的"最低层" API。ExoPlayer都在它之上封装了一层,只有当你需要时,才会直接面对它。

2026-11-10 12:06:18 306

原创 Android 四大 Interpolator 源码解析:从数学公式到速度曲线

*** 二次方减速插值器:等价于 DecelerateInterpolator,但用幂函数表达* f(t) = 1 - (1 - t)^p,p 越大后段减速越猛*/@Overridepower = 2时就是 DecelerateInterpolator,power = 3时后段减速更狠,视觉上更"利落"。

2026-11-04 09:36:42 612

原创 拆解 ComponentActivity.viewModels()

类型参数不再需要"运行时存在",自然也就绕开了擦除。一调用就把工厂造出来,那么"声明了但这次没用上"的情况就白付了这份开销。靠 lambda 把这一步推迟了,但这不代表可以自己在构造函数里直接写。返回带参数支持的工厂——延迟读取让多态在任何时候都成立。:函数体必须能搬到调用点,才可能带着具体类型一起搬。但"类型对不上"只是表层原因,真正有价值的是。:不能赋给变量,不能返回,不能传给非内联函数。,Kotlin 就会为它生成真正的函数对象(属性是在 lambda 里读的,读的时机是。

2026-11-02 17:01:08 631

原创 CRC-16/MODBUS 详解:原理 + Java 实现

它的检错能力远强于简单累加和,且硬件/软件实现都很快,所以串口、Modbus、CAN 总线全在用它。不同的组合就是不同的 CRC 变体,算出来的值完全不同。(0x8005 的位倒序)。收发两端只要有一端把顺序写反,设备就会校验失败、静默丢帧,且这种问题串口工具看不出来——务必用上面的测试帧先自测。:把整帧数据当作一个超长的二进制数,用一个约定的"生成多项式"去模除它,得到的余数就是校验值。,这和大多数协议的"大端"习惯相反,是 Modbus 串口通信最常见的翻车点。算出 CRC 只完成了一半,

2026-10-30 13:51:38 472

原创 Java 并发集合:锁的众生相

集合锁类型读操作写操作Vectorsynchronized 方法加锁加锁Hashtablesynchronized 方法加锁加锁Stacksynchronized 方法(继承Vector)加锁加锁synchronized 包装加锁加锁ReentrantLock(写时复制)无锁加锁一把 ReentrantLock + 两个 Condition加锁加锁读写分锁(2 把 ReentrantLock)加锁加锁一把 ReentrantLock(扩容时短暂释放)

2026-10-26 09:53:11 597

原创 Android 设备锁定:Kiosk Mode 实战

关键点内容必备条件核心 API拦截 HOME不能直接拦截,但通过成为 launcher 绕开重启防御持久首选 launcher 重启后仍生效物理攻击拔电拦不住,但开机后仍在锁定页核心难点在于理解 Android 设备管理的权限层级(普通应用 → Device Admin → Device Owner → 系统 app),以及 Kiosk Mode 与 launcher 接管的关系。

2026-10-20 21:23:26 317 2

原创 把 Android App 打包成系统应用(System App)

系统应用必须用设备的 platform 私钥签名。签名后的 APK 要放到。配置目录权限644root:rootrestorecon后重启。必须声明。按这套流程走下来,看到和,就说明系统应用模式已经跑通。

2026-10-19 14:37:08 397

原创 从零实现一个支持跨进程(IPC)的自定义 Toast

ToastView这是最基础的"长得像 Toast 的东西"。AIDL 文件必须放在下,包名要和 Java/Kotlin 代码一致。/*** 回调接口:远程 Service 通过它把消息回传给客户端进程*/// 非基本类型参数必须标明方向:in 表示数据流向服务端// 即使同包,AIDL 也要求显式 import/*** 跨进程 Toast 服务(对应系统里的 NotificationManagerService)*//** 发一条消息,服务端会广播给所有已注册的客户端 */

2026-10-18 21:39:33 1219

原创 LiveEventBusCore 跨 Activity 通讯源码解析

单例:全局共享消息通道。LiveEvent内部持有一个:所有订阅同一 key 的 Activity/Fragment 共享同一个LiveData。重写:把激活阈值从默认的STARTED降到CREATED,让 Activity 从onCreate起就能收到消息,且生命周期销毁后自动解绑。:在保留 LiveData 粘性的基础上,给普通observe增加“非粘性”语义。理解了这四点,就能明白为什么 Activity A 的一条post。

2026-10-16 11:47:54 261

原创 flatMapLatest:为什么它永远只认最新值?

flatMapLatest 会在新值到达时,立刻取消旧值对应的 Flow 收集,因此它天然适合"只有最新请求才有效"的场景;凡是旧结果可以丢弃的异步任务,优先考虑它。

2026-10-13 15:00:04 220

原创 Android 嵌套滑动冲突:内部拦截 vs 外部拦截实战

嵌套滑动冲突的解法可以归为两类:**外部拦截**(父 View 在 `onInterceptTouchEvent` 里决定要不要抢事件)和 **内部拦截**(子 View 在 `onTouchEvent` 里调用 `requestDisallowInterceptTouchEvent` 决定是否上交事件)。

2026-10-12 12:13:47 650

原创 Android View 事件分发:用“快递签收”看懂源码

触摸事件就像一份快递。`Activity` 发货 → `Window / DecorView` 转运 → `ViewGroup` 分拣 → `View` 签收。`dispatchTouchEvent` 是门卫,`onTouchEvent` 是签收人;`OnTouchListener` 是代收人;`ViewGroup` 还能半路截胡,子 View 可以贴“请勿代签”。

2026-10-11 00:05:39 941

原创 Chat 聊天模块功能总结

基于 Vue 2 + Element UI + WebSocket 的企业级即时通讯模块,支持单聊、群聊、审批消息推送、翻译等功能。文件大小限制 50MB,工具栏配置。

2026-10-10 13:42:57 275

原创 InputStage 责任链核心执行流程

`InputStage` 是 Android 输入事件分发中的**责任链处理器**,输入事件从链头开始依次经过每个 Stage,每个 Stage 决定自己处理还是传给下一个。

2026-10-09 08:30:11 566

原创 一个公式看懂动态跨表查找:P8 + VLOOKUP

如果工作表名里包含空格、特殊符号,或者和区域地址连在一起,Excel 要求用单引号包裹工作表名。VLOOKUP 的第三个参数表示返回查找区域中的第几列。这样整条公式向下填充时,查找的表名不会跟着变。把一段文本变成真正的 Excel 引用。加单引号是最稳妥的写法,所有表名都兼容。也就是说,查找哪个工作表,是由。,无论公式复制到哪里,都锁定在。这是整个公式最灵活的部分。列里找不到,公式会返回。如果想模糊匹配,可以改成。所以返回的是目标表中。

2026-10-08 14:24:28 475

原创 告别 5555:Android 11 无线调试连不上的原因与解法

Android 11 起,无线调试改用新的握手协议,**不再默认监听固定的 5555 端口**,端口号由系统随机分配。所以照着老教程直接连 5555,必然被拒。

2026-09-30 14:11:36 235

原创 子 View 被压小时,如何向父容器“告状“?——MEASURED_STATE_TOO_SMALL 向上传递机制

`MEASURED_STATE_TOO_SMALL = 0x01000000`,它占用测量结果高 8 位中的最低位,用来标记"子 View 想要的尺寸比父容器给的多"。

2026-09-29 12:12:56 352

原创 LruCache 图片浏览器内存缓存

两级缓存:可配合 `DiskLruCache` 实现内存 + 磁盘二级缓存。

2026-09-28 14:33:59 235

原创 Android 稀疏数组设计取舍:LongSparseLongArray 源码解析与 HashMap 对比

在一个每帧调用上千次、但缓存条目永远只有一两条的地方,这笔交易稳赚。选它的理由从来不是数组比哈希表快,而是——在元素极少的前提下,能用原始类型数组彻底消灭对象分配。

2026-09-28 11:33:11 1055

原创 RecyclerView 缓存机制详解

RecyclerView 缓存的所有设计都围绕一个问题: "这个 ViewHolder 还能不能信" 。

2026-09-27 22:23:22 538

原创 深入理解 Java 的四种引用:强引用、软引用、弱引用、虚引用

写 Java 时我们每天都在new答案取决于"谁在引用它,以及引用有多强"。JVM 把引用分为四个等级:强引用 > 软引用 > 弱引用 > 虚引用。下面逐个介绍,每讲完一种就给出对应的测试代码,跑一遍印象更深。

2026-09-24 10:36:28 340

原创 Android MeasureSpec 详解

MeasureSpec 是父容器向子 View 传递尺寸约束的唯一载体:一个 32 位 int,高 2 位是测量模式,低 30 位是测量尺寸。

2026-09-21 14:56:50 1141

原创 Kotlin / Android 常用函数使用示例手册

Kotlin / Android 常用函数使用示例手册

2026-09-20 15:40:06 677

原创 Android 组件化开发实践

核心思路一句话:业务模块互不依赖、可独立运行,壳工程负责集成打包。

2026-09-18 21:35:33 114

原创 Kotlin Flow combine 源码剖析:一个 Channel 如何优雅合并多条流

zip 是严格按顺序一一配对(第 1 个配第 1 个,第 2 个配第 2 个),任一上游慢下来整体就等着;combine 是各自取最新值,谁快谁多都能跟上。要「配对」用 zip,要「组合状态」用 combine

2026-09-15 16:50:16 339

原创 hiprint 打印预览正常,导出 Excel 报错

hiprint 打印预览正常,导出 Excel 报错

2026-09-14 20:54:23 218

原创 FusibleFlow:Kotlin Flow 的融合机制原理

本文以 `FusibleFlow` 为核心,通过源码片段解析 Flow 的"融合"(fuse)优化:`flowOn` 如何触发融合、`fuse` 如何把多层上下文合并为一次线程切换,以及无法融合时 `ChannelFlow` 兜底方案(`collectTo`)的工作方式。

2026-09-13 16:23:59 1555

原创 Android JNI 示例:Java 与 C++ 互调演示

这个 Demo 演示了 Android JNI 开发中最常用的几类交互场景

2026-09-11 23:11:08 206

原创 Android WorkManager 笔记

本文档整理了 Android Jetpack `WorkManager` 的几种典型使用方式:同步阻塞任务、协程挂起任务、`Function` 函数式接口,以及任务状态映射的实现思路。

2026-09-10 21:10:15 266

原创 async 函数结果获取机制分析

async 的返回值最终存放在 JobSupport 的 state 字段中,await() 只是去读这个字段——读到了就直接返回(快路径);读不到就挂起自己,等协程完成回调把自己唤醒后再读一次(慢路径)。结果传递的本质是「共享状态 + 完成回调」,不是消息推送。

2026-09-10 02:20:24 196

原创 Kotlin 协程作用域源码剖析

GlobalScope、MainScope、lifecycleScope、viewModelScope 四者的实现原理与正确使用姿势

2026-09-09 14:42:23 136

原创 Kotlin 协程上下文:从 plus 到 CombinedContext,彻底搞懂左偏结构

协程上下文(CoroutineContext)是 Kotlin 协程中用于承载调度器、异常处理器、命名参数等元素的不可变容器。它的内部实现采用左偏结构:合并时右侧(新加入)元素优先,相同 Key 的元素由右侧覆盖左侧。

2026-09-09 00:04:36 335

原创 Kotlin 协程:一文搞懂 CoroutineExceptionHandler 与 ContinuationInterceptor 的区别

执行时序:拦截器贯穿全程,异常处理器最后出场。

2026-09-08 00:04:37 400

原创 Messenger:Android 最轻量的 IPC 方式

Messenger 就是 Handler 的"跨进程版",一端发消息、一端 Handler 处理,双向通信靠 replyTo 贴地址

2026-09-08 00:02:32 733

原创 不用 AIDL,手把手教你手写 Binder 代理类

在日常 Android 开发中,我们习惯了用 AIDL 来定义跨进程接口。但 AIDL 本质上只是一个代码生成工具,它自动生成的 Stub 和 Proxy 类完全可以手写。理解手写 Binder 的过程,能帮助你深入掌握 Android IPC 机制的核心原理

2026-09-07 00:02:40 1531

原创 AIDL 实现 IPC 进程间通信

死亡监听:利用 IBinder.DeathRecipient 监听服务端进程死亡,及时重连或降级。

2026-09-07 00:01:48 451

原创 Kotlin 协程上下文(CoroutineContext)深度解析

普通 Job 遇到子协程异常会向上传播取消,而 SupervisorJob 对非 CancellationException 异常返回 false,实现异常隔离。

2026-09-06 12:44:00 311

原创 SendChannel 与 ReceiveChannel 通信机制

Channel 的设计灵感来源于 Java 中的 BlockingQueue,但其专为非阻塞挂起协程而设计。

2026-09-06 00:55:28 615

uniapp colorui

uniapp colorui

2026-10-26

vue2网页版即时聊天

vue2网页版即时聊天

2026-10-26

electron+vue 实现桌面端

electron+vue 实现桌面端

2026-10-26

vue2自定义excel表单

vue2自定义excel表单

2026-10-26

图书管理系统数据库文件

参考的数据库 sql的 图书管理系统 delphi 图书管理系统 源代码下载,进销存VC下基于SQL的图书管理系统源代码,包括数据录入、数据删除、数据查询、秘密修改等。

2010-05-30

炫酷3D相册

可用的3D相册,直接可用。查看图片,简单的图片游览器 效果很炫!

2013-06-27

android 超炫图片游览器

超炫的图片游览器,超炫的3D图片浏览可切换图片的效果! 触摸可拖拉效果!

2013-06-27

图书管理系统源码java.rar

图书管理系统源代码,包括数据录入、数据删除、数据查询、秘密修改等。

2010-05-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除