<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[allisonchen的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/allisonchen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; allisonchen]]></copyright><item><title><![CDATA[Android 17 重磅重构！服役 20 年的 MessageQueue 迎来无锁改造，卡顿大幅优化！]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/161368277</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/161368277</guid><author>allisonchen</author><pubDate>Sun, 24 May 2026 19:29:52 +0800</pubDate><description><![CDATA[Android 17引入无锁MessageQueue实现DeliQueue，取代传统同步锁机制。原设计因全局锁竞争可能导致主线程阻塞，引发卡顿问题。新方案采用Varhandle+CAS原子操作，通过wait-state、序列号和Treiber栈实现并发安全。测试显示可减少18ms阻塞，避免60Hz刷新率下的丢帧。但可能影响依赖旧版私有API的应用。该优化针对SDK 37+应用，提升性能同时需注意兼容性风险。]]></description><category></category></item><item><title><![CDATA[2024 年度总结｜勇敢去探索～]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/144930271</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/144930271</guid><author>allisonchen</author><pubDate>Sat, 04 Jan 2025 15:09:15 +0800</pubDate><description><![CDATA[毕业 10 年，也成了 10 年 Android 老开发｜紧张充实的 2023！2022 年终总结｜跳槽、换房、坚持输出，与你分享我匆忙的 2022～2021 年终总结｜从写作到演讲，虾米君不断尝试的 2021。]]></description><category></category></item><item><title><![CDATA[Android 15 大变更：支持 16K 内存分页，所有 native app 必须重编译～]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/141750645</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/141750645</guid><author>allisonchen</author><pubDate>Sat, 31 Aug 2024 11:56:32 +0800</pubDate><description><![CDATA[本文为稀土掘金技术社区首发签约文章，30天内禁止转载，30天后未获授权禁止转载，侵权必究！一直以来，Android 系统仅支持 4KB 的内存分页大小，这在一定程度上限制了整体的性能。而随着设备制造商不断打造具有更大物理内存 (RAM) 的设备，这些设备中的许多可能会配置 16 KB（最终更大）的分页大小，作为 Android 系统设计者，是时候考虑是否需要支持 16KB 的设备了。所以，Google 团队的和于 2023 年针对 16KB 分页大小的 Android 性能表现进行了详细测试。]]></description><category></category></item><item><title><![CDATA[浅谈 Android 15 新 API：确保 TextView 完整展示、不被切断～]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/141750561</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/141750561</guid><author>allisonchen</author><pubDate>Sat, 31 Aug 2024 11:49:44 +0800</pubDate><description><![CDATA[很多语言和文字拥有特殊的、复杂的写法、画法，一个字符可能延伸到前一个字符的区域，甚至后一个字符的区域。如果文字的宽度没有做针对这种文字做额外的加宽处理，那么文字整体在边界区域会出现被切掉的现象。比如如下的文字类型，最右边的文字ร์的右上角的符号没有显示完全。针对这个痛点，Android 15 进行了优化，如果 app 面向 Android 15 及更高的版本后，可以采用设置为 true，就可以拓宽 TextView 的显示区域。]]></description><category></category></item><item><title><![CDATA[Android 15 新 API：内存追踪利器 ProfilingManager]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/141750529</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/141750529</guid><author>allisonchen</author><pubDate>Sat, 31 Aug 2024 11:46:46 +0800</pubDate><description><![CDATA[我们都知道 Android Studio 里内置了Profilertool 供大家对 App 在 Memory、CPU、Network、Power 等角度进行 dump 和分析。但如果一个内存相关的 bug 是运行时发生的，而且很难复现，那么后期就很难准确定位发生时的具体状况。值得兴奋的是 Android 15 将直面这个痛点：引入了API，允许 app 对 Memory 进行动态的、随时随地的 dump。生成的文件默认存在本地，也可以通过网络传递到 offboard，方便开发者事后回溯。]]></description><category></category></item><item><title><![CDATA[通过无障碍控制 Compose 界面滚动的实战和原理剖析]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/139543810</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/139543810</guid><author>allisonchen</author><pubDate>Sat, 08 Jun 2024 10:52:47 +0800</pubDate><description><![CDATA[针对 Compose UI 工具包，开发者不仅需要掌握如何使用新的 UI 组件达到 design 需求，更需要了解和实现与 UI 的交互逻辑。比如 touch 事件、Accessibility 事件等等。Compose 中对 touch 事件的处理和原理，笔者已经在《通过调用栈快速探究 Compose 中 touch 事件的处理原理》里进行了阐述Compose 中对 Accessibility 事件的支持和基本原理，笔者已经在。]]></description><category></category></item><item><title><![CDATA[启动信息全掌握，Android 15 重磅 API：ApplicationStartInfo]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/139543786</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/139543786</guid><author>allisonchen</author><pubDate>Sat, 08 Jun 2024 10:51:07 +0800</pubDate><description><![CDATA[是冷启动的、暖启动的、还是热启动的？是被Broadcast拉起来的、Activity拉起来的、还是拉起来的？，用以提供 App 进程启动时候的各种信息。包括：启动类型、来源、进程等等，开发者通过这些信息，可以清晰地掌握启动的情况按需处理。我们总结了新 API所能提供的信息内容，并结合几种常见的Activity启动场景进行了实战阐述。除了个别信息与预期不符以外，大部分都是如期输出了启动信息。至于其他场景下的 App 进程启动：比如ServiceBroadcast。]]></description><category></category></item><item><title><![CDATA[一文读懂 Compose 支持 Accessibility 无障碍的原理]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/139543760</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/139543760</guid><author>allisonchen</author><pubDate>Sat, 08 Jun 2024 10:49:07 +0800</pubDate><description><![CDATA[众所周知，Compose作为一种 UI 工具包，向开发者提供了实现 UI 的基本功能。但其实它还默默提供了很多其他能力，其中之一便是今天需要讨论的：Android 特色的功能。采用 Compose 搭建的界面，完美地支持了 Accessibility 功能：它的 UI 变化能正确地发出无障碍事件并响应来自无障碍服务的操作。那 Compose 是如何做到完美兼容传统的 Accessibility 机制的，本文将按照无障碍事件、无障碍节点、无障碍操作等几个方向为你剖析 Compose 默默做了哪些事情。]]></description><category></category></item><item><title><![CDATA[通过调用栈快速探究 Compose 中 touch 事件的处理原理]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/139539383</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/139539383</guid><author>allisonchen</author><pubDate>Sat, 08 Jun 2024 10:45:43 +0800</pubDate><description><![CDATA[Compose 视图的处理方式和 Android 传统 View 有很大差别，针对 touch 事件的处理自然也截然不同。。本文将以 Compose 中几种最典型的 touch 处理为例，分别介绍其使用场景，并打印其调用栈。最后结合栈和 touch 源码，一起综合分析 Compose 中处理 touch 的原理细节。最后，我们将 Compose 中几种典型的 touch 处理的 process 综合到一张图里，供大家直观地了解互相之间的关系。和物理的 Touch 事件一样，经由抵达。]]></description><category></category></item><item><title><![CDATA[来自 Twitter 的 17 条 Compose 开发规范和检查工具：帮你避坑～]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/136994429</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/136994429</guid><author>allisonchen</author><pubDate>Sun, 24 Mar 2024 20:34:41 +0800</pubDate><description><![CDATA[对于大型团队来说，刚开始采用Compose开发的时候，会面临很多的挑战。尤其每个开发者对 Compose 的认知不同：接触的时间或长或短、开发的水平也参差不齐。Twitter 计划通过创建一套 Compose rules 来解决这些痛点。经过一段时间的探索之后，Twitter 推出了一套自定义的 Compose 静态检查 rules，可以确保开发者编写的函数避免一些常见的错误。的确，Compose 技术有很多超能力，但也存在很多容易犯的错（坑），这时候上面的静态检测 rules 便可以派上用场了。]]></description><category></category></item><item><title><![CDATA[Compose 1.6 发布：性能大升级、拖放新功能、文本新变化...]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/136178278</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/136178278</guid><author>allisonchen</author><pubDate>Mon, 19 Feb 2024 21:10:23 +0800</pubDate><description><![CDATA[基于 1 月 24 号的 Compose 发行计划，我们正式推出了版本。作为 Android 平台备受推崇的原生 UI 工具包，一众知名 App 都在使用 Compose 进行开发，比如 Threads、Reddit 和 Dropbox 等。如今，性能表现已成为 Compose 技术的重中之重，也是本次发布的 1.6 版本的核心焦点，包括：持续改进的Modifier系统、重要 API 的效率提升等等。如果开发者想要尝试该版本，需要将 Compose BOM 升级到2024.01.00。]]></description><category></category></item><item><title><![CDATA[毕业 10 年，也成了 Android 10 年老开发｜紧张充实的 2023]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/135714508</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/135714508</guid><author>allisonchen</author><pubDate>Sat, 20 Jan 2024 13:52:12 +0800</pubDate><description><![CDATA[在这毕业 10 年、从事 Android 开发 10 年的双十之际，我庆幸自己能一直在热爱的 Android 平台上做我喜欢的事情，在固化了 Android App、FW 经验之后能拓展到架构改造、优化等领域，并在新的方向上不断探索。技术以外持续充当了面试官的角色，参与或主导了各式各样的 DEMO 展示，也参加了多个创新、改善的 topic…每一个活动都让我体验到了新的东西，累积了新的经验。在此之中，我也愈发认识到：在职场当中，保持开放的心态、沟通的态度、共赢的策略是多么的重要和难能可贵。]]></description><category></category></item><item><title><![CDATA[万字盘点 Android 领域在 2023 年的重要技术：AI, 14, Compose, 鸿蒙...]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/135318141</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/135318141</guid><author>allisonchen</author><pubDate>Sun, 31 Dec 2023 23:00:00 +0800</pubDate><description><![CDATA[在LLMAIGC大浪潮下作为 AI 先驱的 Google 想在存量最大的 Android 生态里做点延伸即AICore，方便开发者的同时更快地推广自己的 AI 技术为应对 AIGC 的应用态势以及 Android 本身的开发需要，在里引入Studio Bot和更多好用、应景的 Compose 等工具必须要做的、长足的Android 14升级，往更加成熟、安全、稳定的方向去发展逐步优化和迈向更多平台的ComposeUI 工具包和Kotlin语言国内势头正盛的鸿蒙。]]></description><category></category></item><item><title><![CDATA[AICore 带来了 Android 专属的 AI 能力，它要解决什么？采用什么架构思路？]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/134933680</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/134933680</guid><author>allisonchen</author><pubDate>Mon, 11 Dec 2023 18:39:34 +0800</pubDate><description><![CDATA[Google 最近发布的Gemini模型在全球引起了巨大反响，其在多模态领域的 Video demo 无比震撼。对于 Android 开发者而言，其中最振奋人心的消息莫过于模型将内置到 Android 系统当中，并开放给开发者使用。事实上，能够自研LLM大模型的企业屈指可数，大多数的企业或个人都是在搞基于 LLM 的应用创新。而各大模型们各自为政，提供的能力、对接方式都参差不齐，即便在应用这个维度，开发者也很难整体、高效地去开发、拓展。]]></description><category></category></item><item><title><![CDATA[参加了南京 GDG 活动：这些精彩的技术讨论，值得与你分享～]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/134505003</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/134505003</guid><author>allisonchen</author><pubDate>Mon, 20 Nov 2023 16:45:00 +0800</pubDate><description><![CDATA[一直以来发的文章大都是技术的，这次和大家聊点简单点的。密集输出这几年，因为疫情没能在线下和大家碰面，去年又因为时间原因浪费了 Google IO China 门票。所以，今年的南京本地的 GDG DevFest 2023 活动一经上线，就报了名。这次如愿见到了不少朋友，进行了面对面交流，非常赞！]]></description><category></category></item><item><title><![CDATA[手把手教你用 COMPOSE 开发地图 APP～]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/134360885</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/134360885</guid><author>allisonchen</author><pubDate>Mon, 13 Nov 2023 09:00:00 +0800</pubDate><description><![CDATA[很难想象1.0早在2021 年 7 月就发布了。如今两年过去了，Google Play 上排名前 1000 的 App 中已有24%采用了 Compose 这个新技术， 其影响力可见一斑。Jetpack Compose 作为MAD（现代 Android 开发）理念中的一员，确实取得了不少成绩。但我留意到有个技术角落被大家忽视了，那就是 Map 地图。其实，我有阵子没接触 Compose SDK 了，但最近突然发现Google Map。]]></description><category></category></item><item><title><![CDATA[如何优雅地单元测试 Kotlin/Java 中的 private 方法？]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/134117095</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/134117095</guid><author>allisonchen</author><pubDate>Mon, 30 Oct 2023 13:28:06 +0800</pubDate><description><![CDATA[翻译自首先，开发者应该测试代码里的 private 私有方法吗？直接信任这些私有方法，测试到调用它们的公开方法感觉就够了吧。对于这个争论，每个开发者都会有自己的观点。但回到开头的问题本身，到底有没有一种合适的途径来？截止到目前，在面对单元测试私有方法的问题时，一般有如下几种选择：不去测试私有方法 😜*（选择信任，直接躺平）*将目标方法临时改成 public 公开访问权限 😒（可我不愿意这样做，这不符合代码规范。作为一名开发者，我要遵循最佳实践。]]></description><category></category></item><item><title><![CDATA[从车窗升降一探 Android 车机的重要 API：车辆属性 CarProperty]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/133975373</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/133975373</guid><author>allisonchen</author><pubDate>Sun, 22 Oct 2023 17:25:08 +0800</pubDate><description><![CDATA[一文了解 Android 车机如何处理中控的旋钮输入从实体按键看 Android 车机的自定义事件机制深度入门 Android 车机核心 CarService 的构成和链路本篇文章我们聚焦 Android 车机上最重要、最常用的接口：即车辆属性。并结合车窗升降这种典型的场景来探究它的完整链路。App 先通过 Car lib 拿到CarService的Car实例，CarService 会初始化所有 Car 相关的实现，比如其中车辆属性的化，会初始化和等。]]></description><category></category></item><item><title><![CDATA[不用休眠的 Kotlin 并发：深入对比 delay() 和 sleep()]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/133685628</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/133685628</guid><author>allisonchen</author><pubDate>Mon, 09 Oct 2023 12:00:00 +0800</pubDate><description><![CDATA[毫无疑问，Kotlin 语言中的协程 Coroutine 极大地帮助了开发者更加容易地处理异步编程。该特性中封装的诸多高效 API，可以确保开发者花费更小的精力去完成并发任务。一般来说，开发者了解一下如何使用这些 API 就足够了！可就 JVM 的角度而言，协程一定程度上减少了*“回调地狱”*的问题，切实地改进了异步处理的编码方式。相信包括笔者在内的很多开发者常常会好奇。所以，本文将以delay()为切入点，带开发者剖析下协程的背后原理。]]></description><category></category></item><item><title><![CDATA[面试题：手指从按钮 A 平移到 B，会发生什么？为什么？]]></title><link>https://blog.youkuaiyun.com/allisonchen/article/details/132916609</link><guid>https://blog.youkuaiyun.com/allisonchen/article/details/132916609</guid><author>allisonchen</author><pubDate>Mon, 18 Sep 2023 07:45:00 +0800</pubDate><description><![CDATA[Touch 相关问题是 Android 面试中常问的点，不一定要求大家都从 InputFlinger 底层开始回答，但起码需要了解 Touch 抵达 App 之后的完整处理。而即便是这段偏上层的链路，也不要局限在老生常谈的过程复述，需要深刻理解、灵活运用其中的细节和原则。本文结合一个简单的 Touch 场景的问答，带大家加深一下 Touch 分发的理解。Button A 和 B 相邻，手指不抬起、从 A 平移到 B，A 会发生什么？为什么？此刻，B 又会发生什么？为什么？]]></description><category></category></item></channel></rss>