查看原文
其他

Android Weekly #36 :把事情做好不是重点,如何找到正确的事才是关键

Gracker Android Performance 2022-07-13

技术文章

过去一周 Android 相关的技术文章精选,以及过去一周发现的经典文章

  1. 沉思录| 开篇:Kotlin 的「丑与美」,以及「最佳实践」[1]:Kotlin 其实是一个非常宽泛的话题,除了语法特性层面的「丑」与「美」,其实还有许多能聊的东西,比如:编程范式、DSL 设计、数据结构与算法、设计模式,KMM、Compose Multiplatform。这些内容,我都会尝试在这个系列的博客里去做一些涉猎。

  2. 言简意赅 Android 架构设计与挑选[2]:谈到 Android 架构,相信谁都能说上两句。从 MVC,MVP,MVVM,再到时下兴起 MVI,架构设计层出不穷。如何为项目选择合适架构,也成常备课题。由于架构并非空穴来风,每一种设计都有其存在依据。故今天我们一起探寻 “架构演化” 来龙去脉,相信阅读后你会豁然开朗。

  3. Google Android 官方架构示例,我在起跑线等你:天下本就无完美事物,有则是创作者不断死磕,精益求精。

  4. Linux Cpuidle 介绍:当 cpu 上面没有任务执行的时候,系统是如何进行 cpu 管理的,如果在没有任务的时候只是单纯的关闭 cpu,那么下一次来一个事件的时候系统又如何兼顾此时的性能呢。在 Linux kernel 中,当 cpu 中没有任务在执行,也没有任何中断、异常信号过来的时候,我们称为处于 idle 状态,针对这种状态 Linux 设计了一套 cpuidle framework 框架,专门用于 cpuidle 的管理。

  5. Android Studio 中 CPU Profiler 系统性能分析工具的使用[3]:在 Android 的开发中我们常用的系统性能分析工具有 Systrace,Perfetto 与 Profiler 工具。我们依次来看看这些工具。

  6. 美颜相机 视频录制 卡顿丢帧 trace 分析[4] :通过阅读本文,您将收获以下知识点

    1. 美颜相机录制视频 trace 分析概览
    2. Camera FWK 与 camera HAL 录像交互
    3. 美颜相机 app 与 SurfaceFlinger 交互
    4. 美颜相机卡顿丢帧 trace 分析
  7. Google I/O :Android Jetpack 最新变化

    1. Google I/O :Android Jetpack 最新变化(一) Architecture[5]
    2. Google I/O :Android Jetpack 最新变化(二) Performance[6]
    3. Google I/O :Android Jetpack 最新变化(三)UI[7]
    4. Google I/O :Android Jetpack 最新变化(四)Compose[8]
  8. Google I/O : 使用 Baseline Profiles 优化启动性能[9]:应用的启动优化是 Android 性能优化中的一个常见问题,除了常规的一些优化手段,在本次 Google/IO 大会还介绍了通过 Baseline Profiles 来优化启动速度。本文主要包括以下内容:

    1. Baseline Profiles 是什么?
    2. 如何使用 Baseline Profiles?
    3. 使用 Baseline Profiles 的效果怎么样?
  9. Android 13 makes file managers less useful by fixing a loophole[10]:每个安卓版本的更新都会带来大量的变化,有些变化比其他的更多。每个新版本中面向用户的功能和开发者 API 的比例有很大的不同,但大多数变化实际上是用户看不到的。性能的改进尤其难以察觉,即使它们可以被量化。

    像每一个新的安卓版本一样,安卓 13 在这里和那里有一些与性能有关的优化,但最有影响的改进之一可能来自对底层 Linux 内核的更新。由谷歌开发的 Linux 新的多代 LRU 框架将极大地改善内核的页面回收策略,对内存管理和 CPU 使用产生实质性的改善。在本周的《安卓甜点》中,我将解释 Linux 的内存管理如何通过多代 LRU 变得更好,以及这如何为安卓设备带来更好的性能。

  10. Whatsapp Clone for Android & IOS using Flutter & Python

    1. Whatsapp Clone for Android & IOS using Flutter & Python - Part 1 (Complete Tutorial)[11]
    2. Whatsapp Clone for Android & IOS using Flutter & Python - Part 2 (Complete Tutorial)[12]
    3. Whatsapp Clone for Android & IOS using Flutter & Python - Part 3 (Complete Tutorial)[13]
    4. Building a Video Calling App using Python & Flask[14]
    5. Whatsapp Clone for Android & IOS using Flutter & Python - Part 5 (Complete Tutorial)[15]
    6. Whatsapp Clone for Android & IOS using Flutter & Python - Part 6 (Complete Tutorial)[16]
    7. Whatsapp Clone for Android & IOS using Flutter & Python - Part 7 (Complete Tutorial)[17]
  11. Software architecture diagramming and patterns[18]:一个软件的架构是任何成功的软件系统的基础,它将影响整个系统生命周期内的可维护性、可扩展性、稳定性和安全性。实施一个新的软件系统的第一步就是架构图。

    随着软件系统和网络应用变得越来越复杂,精心设计的系统架构图已经成为与其他开发者和利益相关者沟通的关键。软件架构图是一种重要的文档实践,它可以帮助你计划和实施网络中的变化,将战略举措可视化,并保持在你的组织的需求之前。

    今天,我们将集中讨论如何绘制图表,一些流行的软件架构模式的例子,以及寻找参考架构的地方,作为各种用例的起点。我们还将讨论一个好的架构图应该达到什么目的,以及为什么你应该花时间来创建一个架构图。

  12. 究极 GC 难题定位记:本文记录升级到 flutter 2.2.3 后出现的数个诡异的、无法重现的 top 崩溃的分析定位过程。

  13. ViewBinding,您真的理解了吗? | 开发者说·DTalk

  14. The God-level Kotlin Function[19]:我去年为一家公司写了一个自定义视图,我制作了上帝级别的函数,在这里你会用到 Kotlin 给我们的每一种类型的函数。要想更好地理解这篇文章,有一个小前提--你应该知道如何在自定义视图中对数值进行动画处理。如果你不知道这个话题,你可以简单地浏览一下我几天前发表的这篇文章。

  15. 探索 Compose 内核:深入 SlotTable 系统:Compose 的绘制有三个阶段,组合 > 布局 > 绘制。后两个过程与传统视图的渲染过程相近,唯独组合是 Compose 所特有的。Compose 通过组合生成渲染树,这是 Compose 框架的核心能力,而这个过程主要是依赖 SlotTable 实现的,本文就来介绍一下 SlotTable 系统。

  16. Compose 与 AGP、KGP 的关系:在学习 Compose 的时候,有没有同学有一种困惑,Compose 到底是哪个 AGP 版本开始支持的,然后还会听到一些声音说,Compose 从 AGP 7.x 才开始支持,可当我使用 IntelliJ IDEA 创建 KMP 项目时,AGP 版本明明是 4.2.2,所以,为了搞清楚这个问题,我准备探索下 Compose 与他们之间的关系。

  17. B 站移动端低代码测试探索与实践:移动互联网作为一个跨度十年有余的行业,业内的技术生态已经基本上定型。在经历过各大公司技术创新跟实践后,移动端的质量保障方案逐渐演变为几个大的方向,第一个方向是将测试能力右移,通过灰度、容灾、监控建立质量保障方案,如 Crash 告警、舆情监控、问题排查、业务全链路问题定位等,基于线上规模化效应,快速发现线上问题,再通过配置、热更新、动态化等技术手段修复线上问题。另外一个方向是将测试能力左移,建设一系列的线下保障手段,如测试流程规范化、UI 自动化、Monkey、性能专项测试工具链等,在版本发布前尽可能发现多的缺陷,通过组织用例评审、用例执行、专项测试等环节确保交付版本的功能正确性。还会有一些团队基于特定的需求做定向技术优化,如包大小管控、安装包重排、二进制压缩等。无论是技术的广度还是深度,业内的移动端技术体系已经比较成熟,但在代码测试这块一直缺少通用性的测试框架。

  18. 对小绵羊的轰炸 APP 逆向分析:在网络上意外看到一款叫小绵羊的轰炸机 APP,经过下载安装(这种未知风险的 APP 建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在 APP 界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。

  19. 携程酒店 Flutter 性能优化实践:携程酒店业务使用 Flutter 技术开发的时间快接近两年,这期间有列表页、详情页、相册页等页面使用了 Flutter 技术栈进行了跨平台整合,大大提高了研发效率。在开发过程中,也遇到了一些性能相关问题和用户反馈,比如长列表滚动卡顿、页面打开时间较长、页面打开后部分数据加载时间较长等问题。为解决这些问题,我们选用了多个性能指标监控业务运行状态,借助性能检测工具定位问题,并查阅源码、文档等资源解决问题,形成了这篇文章。

    同时在不断的需求迭代和代码更新过程中,APP 的性能稳定性持续受到挑战,为此我们建立了线上性能监控系统,通过量化,治理,监控三方面手段,持续改善 APP 性能和用户体验。目前页面的各种性能指标诸如 FPS、TTI、内存等都达到了不错的效果,本文将介绍我们在优化过程中所遇到的问题和采取的主要优化方案。

  20. 一些可以显著提高 Java 启动速度方法:我们线上的业务 jar 包基本上普遍比较庞大,动不动一个 jar 包上百 M,启动时间在分钟级,拖慢了我们在故障时快速扩容的响应。于是做了一些分析,看看 Java 程序启动慢到底慢在哪里,如何去优化,目前的效果是大部分大型应用启动时间可以缩短 30%~50%

  21. 如何让一套代码完美适配各种屏幕?[20]:可以看到主流的分辨率有 10 多种,当不做适配时,一套代码在不同设备上的效果偏大、偏小、截断以及留白严重,那一套代码如何完美的展示在不同的设备上,可以看下面的一些适配方案。

经验分享 && 推荐阅读

过去一周个人阅读和收藏的非技术文章精选,扩展 Android 之外的知识和视野,不要给自己设限

  1. 一场历史级别的熊市[21] :2022 年对比特币和以太坊来说是艰难的一年,它们的估值受到了严重的打击。由于持续时间长,资本破坏规模大,我们可以合理地认为 2022 年是数字资产历史上破坏最大的熊市。

  2. DecoHack - Best Product 2022[22]:我每天都会看大量的互联网新产品,2022 年开始,我每周都会挑选一些有意思的产品以 周刊 的形式记录下来。每个产品都会有我的使用体验及相关描述。有些产品非常有用,可以提高你的工作生活效率,有些产品非常有意思很有创意,可以激发你的灵感。DecoHack 周刊 推荐的产品目前已经有 300 多个,这个列表我挑选了 100 多个今年我认为最好的产品或者项目,你可以复制这个 Notion 列表,也可以分享给你的朋友们,这个列表我会持续更新,每年都会整理这样的一个列表。

  3. Mimic Shhans 黑猫 NFT 研究:引爆去中心化社区传播的 PFP NFT[23]:Mimic Shhans 是一个 PFP NFT 项目,由 shhans.eth 创作

  4. LWN: NFS: 新千年的进展!:网络文件系统(NFS)协议已经伴随我们近 40 年了。虽然最初被定义为一个无状态(stateless)协议,但 NFS 的具体实现之中一直是需要管理状态的,而且在历次修订中越来越多地把这些状态管理的需求加入了协议。本系列的第一部分文章中讨论了 NFS 的早期情况,重点放在了状态管理方面。这篇文章通过对 NFS 自本世纪初以来的演变进行分析来讲完这个故事。

  5. 维护高 Star Github 项目,会遇到什么有趣的问题 2022 版:去年 7 月份我发布了 《维护两个 10k+Star 的 Github 项目,会遇到什么有趣的问题》 的相关吐槽,当时 JYM 看得还是挺乐呵的,时隔一年之后,让我们来看看又有什么充满“智慧”的问题,「为你展示真实高 Star 开源项目维护者的心路历程」。

  6. 把事情做好不是重点,如何找到正确的事才是关键:这本书和费雪的《利息理论》一样,开头的几句话醍醐灌顶:成果的取得靠挖掘机会,而不是靠解决问题。要创造出成果,资源必须被分配给机会。机会最大化是对企业经营工作的有意义的定义,即企业要的是有效性,而不是效率。如何把事情做好不是重点,重点是「如何找到正确的事情做,并且集中资源和力量做好这件事」

  7. 如何避免陷入琐碎工作的漩涡中?[24]:IM 上的红点、未读的电子邮件、频繁的会议,如果没有一个很好的系统,很容易陷入到这些琐碎的工作中,而忘掉了最重要的事。

    作者 Brie Wolfson 曾在 Stripe 和 Figma 工作过多年,这篇文章中她给出了几种解决上述问题的方法。

  8. Apple Maps vs Google Maps[25]:作者是英国的 UX 设计顾问,以 5 个例子对比两家地图 APP 的设计,说明什么是聪明的 UX 设计

开发 Weekly

  1. Android Weekly-526[26]
  2. Kotlin Weekly #310[27]
  3. onCreate Digest - Issue #115[28]
  4. NEWSLETTER #112[29]
  5. Graphics Programming weekly - Issue 242[30]
  6. 软件测试周刊(第 79 期):陷在自己给自己定的框里,即使永远走直线,也是曲折的
  7. 科技爱好者周刊(第 213 期):知识孤岛,知识软件
  8. 独立产品灵感周刊 DecoHack #021 – 工作、消费主义和新穷人[31]
  9. 体验碎周报第 102 期(2022.7.4)
  10. 体验碎周报第 103 期(2022.7.11)
  11. 前端技术栈周刊 #32

书籍推荐

很贴合现在的情况

定时打鸡血

NewsLetter

由于微信外链限制,很多文章链接都无法直接访问,推荐大家订阅 NewsLetter 来获得更好的阅读体验,或者访问网页端或者知乎专栏

  1. 订阅地址:https://androidweekly.zhubai.love/
  2. 本文 NewsLetter 地址:https://androidweekly.zhubai.love/posts/2158316941763706880
  3. 本文知乎地址:https://zhuanlan.zhihu.com/p/540439900

参考资料

[1]

沉思录| 开篇:Kotlin 的「丑与美」,以及「最佳实践」: https://juejin.cn/post/7098128078374699015

[2]

言简意赅 Android 架构设计与挑选: https://juejin.cn/post/7106042518457810952

[3]

Android Studio 中 CPU Profiler 系统性能分析工具的使用: https://juejin.cn/post/7098548053136637983

[4]

美颜相机 视频录制 卡顿丢帧 trace 分析: https://juejin.cn/post/7098245527350804511

[5]

Google I/O :Android Jetpack 最新变化(一) Architecture: https://juejin.cn/post/7098142116664049678

[6]

Google I/O :Android Jetpack 最新变化(二) Performance: https://juejin.cn/post/7098142376954167332

[7]

Google I/O :Android Jetpack 最新变化(三)UI: https://juejin.cn/post/7098146554787135518

[8]

Google I/O :Android Jetpack 最新变化(四)Compose: https://juejin.cn/post/7098146948254793735

[9]

Google I/O : 使用 Baseline Profiles 优化启动性能: https://juejin.cn/post/7098117781157052429

[10]

Android 13 makes file managers less useful by fixing a loophole: https://blog.esper.io/android-dessert-bites-22-linux-memory-management-38419756/

[11]

Whatsapp Clone for Android & IOS using Flutter & Python - Part 1 (Complete Tutorial): https://dev.to/yash_makan/whatsapp-clone-for-android-ios-using-flutter-python-part-1-complete-tutorial-4in1

[12]

Whatsapp Clone for Android & IOS using Flutter & Python - Part 2 (Complete Tutorial): https://dev.to/yash_makan/whatsapp-clone-for-android-ios-using-flutter-python-part-2-complete-tutorial-554k

[13]

Whatsapp Clone for Android & IOS using Flutter & Python - Part 3 (Complete Tutorial): https://dev.to/yash_makan/whatsapp-clone-for-android-ios-using-flutter-python-part-3-complete-tutorial-l5c

[14]

Building a Video Calling App using Python & Flask: https://dev.to/yash_makan/building-a-video-calling-app-using-python-flask-17m5

[15]

Whatsapp Clone for Android & IOS using Flutter & Python - Part 5 (Complete Tutorial): https://dev.to/yash_makan/whatsapp-clone-for-android-ios-using-flutter-python-part-5-complete-tutorial-aid

[16]

Whatsapp Clone for Android & IOS using Flutter & Python - Part 6 (Complete Tutorial): https://dev.to/yash_makan/whatsapp-clone-for-android-ios-using-flutter-python-part-6-complete-tutorial-3mge

[17]

Whatsapp Clone for Android & IOS using Flutter & Python - Part 7 (Complete Tutorial): https://dev.to/yash_makan/whatsapp-clone-for-android-ios-using-flutter-python-part-7-complete-tutorial-mpg?utm_source=dormosheio&utm_campaign=dormosheio

[18]

Software architecture diagramming and patterns: https://www.educative.io/blog/software-architecture-diagramming-and-patterns

[19]

The God-level Kotlin Function: https://medium.com/codex/the-god-level-kotlin-function-e287a0df8bed

[20]

如何让一套代码完美适配各种屏幕?: https://juejin.cn/post/7117630529595244558

[21]

一场历史级别的熊市: https://insights.glassnode.com/chinese/a-bear-of-historic-proportions-2022-chinese/

[22]

DecoHack - Best Product 2022: https://decohack.notion.site/decohack/21ed6d8428d04b928ccd7fbf2ea36dd2?v=8456b58b9e184cbca2979d033d5f83a6

[23]

Mimic Shhans 黑猫 NFT 研究:引爆去中心化社区传播的 PFP NFT: https://mirror.xyz/mtyl.eth/4KAtG1w4DIPTue8UtNdDe9mPSISBjmt071lEdlVlrEk

[24]

如何避免陷入琐碎工作的漩涡中?: https://review.firstround.com/ditch-your-to-do-list-and-use-these-docs-to-make-more-impact

[25]

Apple Maps vs Google Maps: https://builtformars.com/case-studies/maps

[26]

Android Weekly-526: https://androidweekly.net/issues/issue-526

[27]

Kotlin Weekly #310: https://mailchi.mp/kotlinweekly/kotlin-weekly-310

[28]

onCreate Digest - Issue #115: https://www.oncreatedigest.com/issues/oncreate-digest-issue-116-1248156

[29]

NEWSLETTER #112: https://dormoshe.io/newsletters/ag/android/112

[30]

Graphics Programming weekly - Issue 242: https://www.jendrikillner.com/post/graphics-programming-weekly-issue-242/

[31]

独立产品灵感周刊 DecoHack #021 – 工作、消费主义和新穷人: https://www.decohack.com/Post/753

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存