Kotlin 的 Wasm 目标平台,浏览器里跑 Kotlin Kotlin 的 Wasm 目标平台,浏览器里跑 Kotlin Kotlin 的 Wasm 目标平台,浏览器里跑 Kotlin Kotlin 2.0 正式发布那会儿,JetBrains 把 Wasm 目标平台往前推了一大步。不是那种"实验性玩具终于可以跑 Hello World"的进度更新,而是直接 2026-08-19 随笔 0
Material You 的动态壁纸取色,为什么有的 App 适配了有的没有 Material You 的动态壁纸取色,为什么有的 App 适配了有的没有 Material You 的动态壁纸取色,为什么有的 App 适配了有的没有 Android 12 正式版推送那天,我特意找了一张紫色调的油画壁纸,想看看传闻中的 Material You 到底能不能让系统界面融为一体。结 2026-08-19 随笔 0
Compose 动画的 animate*AsState 底层怎么实现的 Compose 动画的 animate*AsState 底层怎么实现的 Compose 动画的 animate*AsState 底层怎么实现的 前段时间在做一个折叠面板的动画优化时,我踩到了一个挺隐蔽的坑。表现很简单:用 animateDpAsState 控制一个 Column 的高度展开,如果用户 2026-08-19 Android 0
开源图表库选型:MPAndroidChart 之外还有什么 开源图表库选型:MPAndroidChart 之外还有什么 开源图表库选型:MPAndroidChart 之外还有什么 MPAndroidChart 在 GitHub 上有着超过三万六千个 Star,这让它几乎成了 Android 图表领域的默认答案。但如果你在 2024 年打开它的 release 2026-08-19 tool 0
Jetpack Compose 的 TextField 性能,长文本输入的卡顿 Jetpack Compose 的 TextField 性能,长文本输入的卡顿 Jetpack Compose 的 TextField 性能,长文本输入的卡顿 如果你用 Jetpack Compose 写过带输入功能的页面,比如一个笔记编辑器、长文本表单或者代码输入框,大概率碰到过这种场景:当字符数 2026-08-19 随笔 0
Kotlin 的 Contracts API,告诉编译器一些事 Kotlin 的 Contracts API,告诉编译器一些事 「Kotlin 的 Contracts API,告诉编译器一些事」 去年重构一个老旧 Android 模块时,我抽了一个非常普通的高阶函数,想给 Trace.beginSection 和 Trace.endSection 包一层,让 S 2026-08-19 Android 0
Scrcpy 的投屏控制,开发者调试神器 Scrcpy 的投屏控制,开发者调试神器 Scrcpy 的投屏控制,开发者调试神器 去年在调试一个桌面小部件(AppWidget)的刷新问题时,我遇到了一个典型的 Android 开发者困境:测试机平放在桌上,USB 线连着电脑跑日志,但每次解锁看 UI 状态都要歪着头瞄屏幕。那天手头正好在跑一组长 2026-08-19 tool 0
Kotlin Multiplatform 稳定版发布,生态还差什么 Kotlin Multiplatform 稳定版发布,生态还差什么 Kotlin Multiplatform 稳定版发布,生态还差什么 KotlinConf 2023 的 Keynote 上,JetBrains 官宣 Kotlin Multiplatform(KMP)进入 Stable 状态。台下掌 2026-08-19 随笔 0
Intent 的 FLAG_ACTIVITY_CLEAR_TOP 与 singleTask,任务栈清理的坑 Intent 的 FLAG_ACTIVITY_CLEAR_TOP 与 singleTask,任务栈清理的坑 Intent 的 FLAG_ACTIVITY_CLEAR_TOP 与 singleTask,任务栈清理的坑 从一个通知跳转的诡异现象说起 去年维护一个电商类 App 时,我遇到一个几乎让我怀疑 2026-08-19 Android 0
Dynamic Feature Module 上线一年后的真实体验 Dynamic Feature Module 上线一年后的真实体验 「Dynamic Feature Module 上线一年后的真实体验」 去年 Q2,我们把应用里两个最重的业务块拆成了 Dynamic Feature Module。动机很直接:Base APK 体积突破了 55MB,在东南亚市场的 2026-08-19 Android 0