← 返回最新期
Android Weekly #24 ·

Android Weekly #24

技术文章

  1. 基于 CV 的通用自动注册/登录方案 https://mp.weixin.qq.com/s/Og4szgoRkaWjfGMgzDeBVg
    是否使用账号登录 App,对于 App 测试场景的覆盖有着相当重要的作用。大量经验和事实证明,大多数 App 在未登录状态下能访问的场景和深度都相当有限。字节跳动推出的这套基于 CV 的智能注册/登录方案,可支持一键登录、微信登录和手机验证码登录三种登录方式,可登录各种非游戏竖屏 App

  2. 快手 Android 内存分配器优化探索 (一) https://mp.weixin.qq.com/s/r7bapC-mobUXKrldAZKzzQ
    快手 App 作为一款以音视频为主的国民级应用,有上百个 so,存在大量 native 内存分配需求,从去年开始,以优化 32 位进程虚拟内存占用为初衷,深入研究并实践了 Android 内存管理机制与内存分配器的诸多技术细节,首创了 Android App 进程的 native 内存分配器替换方案。该方案支持所有 Android 应用集成,同时支持编译时替换与运行时替换两种方案,为 Android 应用的 native 内存优化打开了更多想象空间。本文是系列文章的第一篇,重点讲了Linux 内存管理和内存分配器基础

  3. 致力于让我们研究调试 Linux 内核代码不再痛苦 https://mp.weixin.qq.com/s/N3eP71-_D7ZlMvmSTzHZlw
    “linux 内核块子系统和内存子系统的玩法,很多时候分别在 bio(struct bio)和 page(struct page)上下功夫。如果把这两个对象跟踪起来,知道它们在内核中怎样流动,这对研究和调试内核都是一件非常有帮助的事情” ,需要结合这个 Patch 一起看 https://lore.kernel.org/lkml/20211013222056.312bec0c@oasis.local.home/T/#t

  4. 餐馆和 调度算法 https://mp.weixin.qq.com/s/9giYuuNfUtGv-107vaPaEA
    作者以餐馆上菜为例子,简单介绍了一下 Linux 的几个调度算法

  5. Google 官方的 Hilt 系列 :Hilt 是一个由 Google 开发的依赖项注入库,它通过处理复杂的依赖关系并为您生成原本需要手动编写的模版代码,帮助您在应用中充分利用 DI 的最佳实践。Hilt 通过使用注解在编译期帮您生成代码,来保证运行时性能。这是利用 JVM DI 库 Dagger 的能力实现的,而 Hilt 是基于 Dagger 构建的

    1. Hilt 介绍 | MAD Skills https://mp.weixin.qq.com/s/iixQXwajchSlLdVhSMsFqA
    2. Hilt 测试最佳实践 | MAD Skills https://mp.weixin.qq.com/s/vi1N_MaaobLmvEUd2WUjjg
    3. Hilt 工作原理 | MAD Skills https://mp.weixin.qq.com/s/8dqvt8bh4ZkptcusDw3HUg
    4. Hilt 扩展 | MAD Skills https://mp.weixin.qq.com/s/8mdbFn0ks2TBXXZl5vDhhQ
  6. 递归锁的缺点 https://mthli.xyz/recursive-re-entrant-locks/
    递归锁是一种在上锁时会先检查当前锁是否已经被持有,如果已经被持有则允许代码递归地获取它的锁。通常来说递归锁的实现基于引用计数,这样它们就能被多次获取并被多次释放,但锁被真正释放的时机是当释放的次数恰好等于获取的次数时

  7. ConstraintLayout https://constraintlayout.com/
    ConstraintLayout 的一个入门网站,内容还是比较全面的,不过版本可能有点旧

  8. 进程怎么绑定 CPU? https://mp.weixin.qq.com/s/inKtafw7reHmRqhwvcxi9w
    进程绑定 CPU 的好处:在多核 CPU 结构中,每个核心有各自的 L1、L2 缓存,而 L3 缓存是共用的。如果一个进程在核心间来回切换,各个核心的缓存命中率就会受到影响。相反如果进程不管如何调度,都始终可以在一个核心上执行,那么其数据的 L1、L2 缓存的命中率可以显著提高。
    本文主要讲了如何通过 sched_setaffinity 的系统调用来绑定进程和 CPU,以及 Linux 是如何实现 sched_setaffinity 的

  9. Top 50 Android Interview Questions For Android Developer Jobs https://code.coursesity.com/android-interview-questions
    一些 Android 常见的面试题,不过是英文版本的,有这方面需求的同学可以看一下,顺便熟悉一下英文面试

  10. 利用 AGI 帧分析器优化图形 https://mp.weixin.qq.com/s/Rv0dwAZS8rftCx5DCi-MwA
    Android GPU Inspector (AGI) 是 Android 图形分析工具。我们将介绍最新的功能——帧分析,我们还将通过一些常见示例来说明如何使用 AGI 帧分析器使您的游戏运行得更快!

  11. 100 个囚犯的随机选择问题 https://bytedancer.io/posts/100-prisoners
    算法题……

  12. Flutter 难点问题之 GPU 后台 Crashhttps://mp.weixin.qq.com/s/KVux8rYCPXcvDODUskinBQ
    Flutter ?GPU?后台 Crash?这几个是怎么联系起来的?闲鱼这篇文章案例:Flutter 在 iOS 后台时访问 GPU 导致 Crash 的问题。为什么 App 在后台访问 GPU 会导致 Crash 呢?这其实是和 iOS 系统的策略有关。iOS 系统是禁止后台的 App 访问 GPU 的,主要是为了保证前台正在运行的 App 的性能体验因为 GPU 在系统看来是非常宝贵且有限的资源,如果 App 退到后台之后还继续疯狂使用 GPU 的话,那么前台 App 的性能可能就无法得到保障了。那么就有同学问了,如果 App 并没有遵循这个规范,在退到后台之后,继续使用 Metal 或 OpenGLES 访问 GPU,会发生什么事情呢?答案很简单,会直接 Crash

  13. 微信终端自研 C++协程框架的设计与实现 https://mp.weixin.qq.com/s/c17DaD7JbKlDFT6J8haEFw
    微信自研的 C++ 协程框架:基于跨平台考虑,微信终端很多基础组件使用 C++ 编写,随着业务越来越复杂,传统异步编程模型已经无法满足业务需要。Modern C++ 虽然一直在改进,但一直没有统一编程模型,为了提升开发效率,改善代码质量,我们自研了一套 C++ 协程框架 owl,用于为所有基础组件提供统一的编程模型。
    owl 协程框架目前主要应用于 C++ 跨平台微信客户端内核(Alita),Alita 的业务逻辑部分全部用协程实现,相比传统异步编程模型,至少减少了 50% 代码量。Alita 目前已经应用于儿童手表微信、Linux 车机微信、Android 车机微信等多个业务,其中 Linux 车机微信的所有 UI 逻辑也全部用协程实现。

  14. Binder | 对象的生命周期 https://juejin.cn/post/7021558328421515271
    Binder 传输中会产生很多对象,这些对象之间是如何引用的,又是如何在不需要的时候回收的?一旦了解了这种引用关系的内部细节,我们便可以知道这些对象的生命周期是如何管理的。其实核心回答的就是两个问题:

 1. Binder 对象如何保证在 BinderProxy 对象存在时不被回收?
 2. Binder 对象如何在所有 BinderProxy 消亡时被回收?  

“实事求是的说,这篇文章是有难度的。理解它需要具备一些背景知识,也需要对 Binder 通信过程比较了解,否则看起来很可能云里雾里。那既然如此,我为什么要写它呢?原因是有些知识虽然用的人不多,但一旦需要时,这些资料又显得十分稀有。大众爆款做的人很多,小众精品也需要有人耕耘。不管是哪种途径,本质都是希望为中文技术社区做些贡献。”

  1. 在 Android 12 中使用 WorkManager https://mp.weixin.qq.com/s/5yQ4k19yBVhtn6yStLunhw
    Android 12 (API 级别为 31) 引入了前台服务启动限制。除少部分特殊场景外,如果您的应用的 targetSdkVersion 是 Android 12 或者更高 API 级别的话,应用在后台运行时将不能再启动前台服务。这意味着,如果应用当前状态不符合后台启动服务的条件,调用 setForeground 时可能会抛出异常。
    我们在 WorkManager 2.7 中做出了部分改进,使得应用在遵守后台限制的同时可以轻松地安排重要任务。通过加急任务,应用可以轻松地运行耗时短且高优先级的任务,例如发送一条聊天信息或者往社交网络上传一张图片。推荐使用加急任务来启动需要立即执行且即使用户将应用放至后台也能继续执行的任务。

  2. 这次,我想把内存泄漏讲明白 https://juejin.cn/post/7018883931067908132
    一篇讲内存泄漏的文章,把如何判断内存泄漏、如何分析内存泄漏、线上如何处理内存泄漏等问题讲的比较清楚,其中涉及到的知识点也比较多,需要单独拎出来深入

  3. Now in Android #49https://medium.com/androiddevelopers/now-in-android-49-cf0f9d52bf78
    Android 官方出的,一周 Android 动态,感兴趣的可以看一下,有些内容已经包含在了本期内容里面,主要内容:Android Dev Summit 2021, the Paging MAD skills series, the Android Basics in Kotlin course finally complete, Compose for Wear OS, CameraX and KSP articles, touch target accessibility video, Widgets doc updates, extending AGP and Compose new doc pages

非技术文章

  1. Make your WSL / WSL2 terminal awesome with zsh, oh-my-zsh, nerd-fonts and powerlevel10k https://www.the-digital-life.com/awesome-wsl-wsl2-terminal/
    本文是一个 Windows 的 WSL 和 WSL2 的 Terminal 的配置,内容主要是讲如何配置 zsh、oh-my-zsh、nerd-fonts , 将 Terminal 打造成一个高效的工具

  2. 经典的 软件架构设计书籍有哪些? https://www.zhihu.com/question/20891754/answer/2172405005
    敲黑板:《架构师修炼之道》《从零开始学架构》《Thinking Architecturally》

  3. 2021-10-18 聊聊 start-up(小公司) 招聘工程师 https://thaddeusjiang.com/2021-10-18-start-up.html
    作者聊了下小公司招聘工程师的一些要求和目前遇到的难题,总结如下

    1. start-up 很难找到合适的的工程师
    2. start-up 没有办法使用行业通用的测试题筛选候选人
    3. start-up 期待工程师能解决问题、愿意跨出舒适圈、有产品思维。
  4. 博客 - ADB - Episode 177: Honor every photon https://adbackstage.libsyn.com/episode-177-honor-every-photon
    这一期主要是讲相机相关的内容,包括相机如何捕捉图像、如何处理图像,以及 HDR+ 、夜视仪这种是怎么实现的

  5. 夜天之书 #24 Open Source is Not Business Model https://mp.weixin.qq.com/s/xkXUqSD5jifY-aqfNgmsSQ
    开源和商业模式的讨论

  6. 一本讲 Android 流畅性的书,应该有什么内容? 高爷:一本讲 Android 流畅性的书,应该有什么内容?
    从一本书的读后感引发的一个思考:一本讲流畅性的书,应该有什么内容,才可以让大家深入了解呢?

各种 Weekly

  1. https://androidweekly.net/issues/issue-488
  2. https://mailchi.mp/kotlinweekly/kotlin-weekly-272
  3. https://www.jendrikillner.com/post/graphics-programming-weekly-issue-205/

课程 &&图书推荐

  1. Google 官方的 Kotlin 课程 :https://developer.android.google.cn/courses/android-basics-kotlin/course
    官方的免费课程,内容包含 6 个部分:you’ll learn the basics of building Android apps with the Kotlin programming language. Along the way, you’ll develop a collection of apps to start your journey as an Android developer.

    1. Unit 1: Kotlin basics:Take your first steps programming in Kotlin, add images and text to your Android apps, and learn how to use classes, objects, and conditionals to create an interactive app for your users.
    2. Unit 2: Layouts:Build two different apps, and improve the user interface of your app by learning about layouts, Material Design guidelines, and best practices for UI development.
    3. Unit 3: Navigation:Enhance your users’ ability to navigate across, into and back out from the various screens within your app for a consistent and predictable user experience.
    4. Unit 4: Connect to the internet:Write coroutines for complex code, and learn about HTTP and REST to get data from the internet. Then, use the Coil library to display images in your app.
    5. Unit 5: Data persistence:Keep your apps working through any disruptions to essential networks or processes for a smooth and consistent user experience.
    6. Unit 6: WorkManager:Use Android Jetpack’s WorkManager API to schedule necessary background work, like backing up data or downloading fresh content, that keeps running even if the app exits or the device restarts.
  2. Jetpack Compose internals by Jorge Castillo ,是一本最新才出的讲 Jetpack Compose 的书,https://leanpub.com/composeinternals ,电子书是免费的,大家可以自己去网站上下载,或者可以加入微信(553000664),我给大家发各个版本的(请大家以自学为目的,不要拿去卖)

  3. Kotlin 编程实战:创建优雅、富于表现力和高性能的 JVM 与 Android 应用程序 , 也是一本新书,微信有电子版,适合有 Java 基础的人入门 Kotlin

YouTuber 推荐

推荐 Joma Tech ,他的视频还蛮有趣,最主要的是他的英语,我居然一大半不看字幕都可以听懂,这不得推荐一个??

  1. 频道:https://www.youtube.com/c/JomaOppa
  2. 他最火的应该是这个视频:a day in the life of an engineer working from home https://www.youtube.com/watch?v=Rgx8dpiPwpA
  3. 新搞了一个 Channel :Joma in NYC https://www.youtube.com/channel/UCmMGlb7mGXYVthrXYSwlQhw
  4. 编程背景音乐:https://www.youtube.com/watch?v=PY8f1Z3nARo
  5. T:https://twitter.com/jomaoppa

关于投稿

  1. 我只是大自然知识的搬运工,欢迎大家自荐或者推荐,每周都会收集
  2. 欢迎大家向本公众号投稿,会注明作者和来源,可以夹带私活,比如招聘信息

投稿指南

欢迎投稿分享您的:

  • 技术博客
  • 实践经验
  • 工具推荐

投稿方式:

  • 公众号后台回复”投稿”
  • 本周刊下面留言
  • 发邮件:dreamtale.jg@gmail.com
  • 微信联系:Gracker_Gao

关于作者

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

版权声明

  • 本周刊遵循 CC BY-NC-SA 4.0 协议
  • 转载请注明出处:Android Weekly
  • 欢迎订阅、分享,让更多开发者受益