Android

邪恶机器人

94 篇文章
Android
ConcurrentLinkedQueue 的无锁队列,适合什么场景

ConcurrentLinkedQueue 的无锁队列,适合什么场景

ConcurrentLinkedQueue 的无锁队列,适合什么场景 「ConcurrentLinkedQueue 的无锁队列,适合什么场景」 去年在优化一个相机预览模块的帧缓冲区时,我把原来的 LinkedBlockingQueue 换成了 ConcurrentLinkedQueue。当时的想法很

Shizuku 权限方案,无 Root 调用系统 API 的实践

Shizuku 权限方案,无 Root 调用系统 API 的实践

Shizuku 权限方案,无 Root 调用系统 API 的实践 「Shizuku 权限方案,无 Root 调用系统 API 的实践」 Android 14 上,我尝试在应用内直接通过反射关闭另一个应用的通知权限。代码刚跑起来就收到了一个无情的 SecurityException,日志很直白:uid

DocumentsContract 的树形文档访问,SAF 的局限

DocumentsContract 的树形文档访问,SAF 的局限

DocumentsContract 的树形文档访问,SAF 的局限 「DocumentsContract 的树形文档访问,SAF 的局限」 去年把文件管理模块重构到纯 SAF(Storage Access Framework)方案时,我在 Android 11 的测试机上遇到一个极其诡异的权限崩溃。

Macrobenchmark 测出来的启动时间,跟真实用户差多少

Macrobenchmark 测出来的启动时间,跟真实用户差多少

Macrobenchmark 测出来的启动时间,跟真实用户差多少 「Macrobenchmark 测出来的启动时间,跟真实用户差多少」 去年做完一轮启动优化,本地跑 Macrobenchmark 的数据看起来相当漂亮。StartupTimingMetric 测出来的 timeToInitialDis

Baseline Profile 启动优化实测,效果有多少

Baseline Profile 启动优化实测,效果有多少

Baseline Profile 启动优化实测,效果有多少 Baseline Profile 启动优化实测,效果有多少 上个月在给一个 Jetpack Compose 项目做冷启动性能基线的时候,Macrobenchmark 跑出来的数据让我一度怀疑设备坏了。同一台 Pixel 7,同一个 APK,

Android 的 TTS 引擎选择,系统 vs 第三方

Android 的 TTS 引擎选择,系统 vs 第三方

Android 的 TTS 引擎选择,系统 vs 第三方 「Android 的 TTS 引擎选择,系统 vs 第三方」 去年把 App 的 targetSdkVersion 升到 31(Android 12)之后,后台收到一条很诡异的崩溃链:用户在 Pixel 5 上点击播放按钮,应用直接闪退,堆栈

KMP 项目里的 expect/actual 是怎么工作的

KMP 项目里的 expect/actual 是怎么工作的

KMP 项目里的 expect/actual 是怎么工作的 KMP 项目里的 expect/actual 是怎么工作的 去年把团队里的核心网络层从纯 Android 迁到 Kotlin Multiplatform 时,我碰到的第一个硬钉子不是协程在 Darwin 上的内存模型,也不是 CocoaPo

WebView 的 JsBridge 方案,现在还有必要吗

WebView 的 JsBridge 方案,现在还有必要吗

WebView 的 JsBridge 方案,现在还有必要吗 「WebView 的 JsBridge 方案,现在还有必要吗」 上个月处理一个老项目的性能工单,用户反馈在低端机上点击 H5 页面的按钮后,Native 端要卡将近半秒才有响应。抓 Systrace 一看,时间全耗在了一条 shouldOv

Notification Channel 的分组策略,太多渠道怎么办

Notification Channel 的分组策略,太多渠道怎么办

Notification Channel 的分组策略,太多渠道怎么办 「Notification Channel 的分组策略,太多渠道怎么办」 做内容聚合类应用的工程师大概率都遇到过这个窘境:产品运营要求每个栏目单独开关通知,技术侧为了把控制权交给用户,在 Android O 之后为每个栏目都建了独

Choreographer 的帧回调,自己监听能做什么

Choreographer 的帧回调,自己监听能做什么

Choreographer 的帧回调,自己监听能做什么 「Choreographer 的帧回调,自己监听能做什么」 去年把项目里的性能监控 SDK 从基于 Handler 的埋点方案切到 Choreographer 时,我满以为这只是一个简单的 API 替换。毕竟 Choreographer 从 A