Macrobenchmark 测出来的启动时间,跟真实用户差多少 Macrobenchmark 测出来的启动时间,跟真实用户差多少 「Macrobenchmark 测出来的启动时间,跟真实用户差多少」 去年做完一轮启动优化,本地跑 Macrobenchmark 的数据看起来相当漂亮。StartupTimingMetric 测出来的 timeToInitialDis 2026-08-03 Android 0
Baseline Profile 启动优化实测,效果有多少 Baseline Profile 启动优化实测,效果有多少 Baseline Profile 启动优化实测,效果有多少 上个月在给一个 Jetpack Compose 项目做冷启动性能基线的时候,Macrobenchmark 跑出来的数据让我一度怀疑设备坏了。同一台 Pixel 7,同一个 APK, 2026-08-03 Android 0
Android 的 TTS 引擎选择,系统 vs 第三方 Android 的 TTS 引擎选择,系统 vs 第三方 「Android 的 TTS 引擎选择,系统 vs 第三方」 去年把 App 的 targetSdkVersion 升到 31(Android 12)之后,后台收到一条很诡异的崩溃链:用户在 Pixel 5 上点击播放按钮,应用直接闪退,堆栈 2026-07-31 Android 10
KMP 项目里的 expect/actual 是怎么工作的 KMP 项目里的 expect/actual 是怎么工作的 KMP 项目里的 expect/actual 是怎么工作的 去年把团队里的核心网络层从纯 Android 迁到 Kotlin Multiplatform 时,我碰到的第一个硬钉子不是协程在 Darwin 上的内存模型,也不是 CocoaPo 2026-07-31 Android 27
WebView 的 JsBridge 方案,现在还有必要吗 WebView 的 JsBridge 方案,现在还有必要吗 「WebView 的 JsBridge 方案,现在还有必要吗」 上个月处理一个老项目的性能工单,用户反馈在低端机上点击 H5 页面的按钮后,Native 端要卡将近半秒才有响应。抓 Systrace 一看,时间全耗在了一条 shouldOv 2026-07-29 Android 12
Notification Channel 的分组策略,太多渠道怎么办 Notification Channel 的分组策略,太多渠道怎么办 「Notification Channel 的分组策略,太多渠道怎么办」 做内容聚合类应用的工程师大概率都遇到过这个窘境:产品运营要求每个栏目单独开关通知,技术侧为了把控制权交给用户,在 Android O 之后为每个栏目都建了独 2026-07-29 Android 15
Choreographer 的帧回调,自己监听能做什么 Choreographer 的帧回调,自己监听能做什么 「Choreographer 的帧回调,自己监听能做什么」 去年把项目里的性能监控 SDK 从基于 Handler 的埋点方案切到 Choreographer 时,我满以为这只是一个简单的 API 替换。毕竟 Choreographer 从 A 2026-07-29 Android 12
ExoPlayer 的自定义 Renderer,硬解失败 fallback ExoPlayer 的自定义 Renderer,硬解失败 fallback 「ExoPlayer 的自定义 Renderer,硬解失败 fallback」 线上有一个崩溃在 Amlogic S905X3 方案的电视盒子上集中爆发。Android 10,ExoPlayer 2.18.1,播放 HEVC 2026-07-27 Android 13
Mediation 广告聚合,变现收益到底差多少 Mediation 广告聚合,变现收益到底差多少 Mediation 广告聚合,变现收益到底差多少 去年 Q3 我把一个 DAU 八十万左右的工具 App 从纯 AdMob 切到了 AdMob Mediation,接了 Meta Audience Network、Mintegral、Pangle 三 2026-07-23 Android 35
Android 的内存分页与大页,对 App 有什么影响 Android 的内存分页与大页,对 App 有什么影响 Android 的内存分页与大页,对 App 有什么影响 去年在做一款相机 App 的内存治理时,我碰到了一个蹊跷的现象。同一套代码在 Pixel 6(Android 13)上跑 4K 60fps 预览流,Native Heap 的 RSS 2026-07-23 Android 157