Android Weekly #27
技术文章
过去一周 Android 相关的技术文章精选
实战 | 在应用中使用 Compose Material 3
- Material You 是下一代 Material Design 的发展方向,也是一种全新的设计愿景: 方便您打造个性化的样式设计、满足各种需求并自适应各种屏幕;Jetpack Compose 是用于构建原生 Android 界面的新款现代工具包,可以帮助您更快地构建更出色的应用。
- 您可能对现有的 Compose Material 库十分了解,它基于 Material Design 2 规范,其中包括了 Material 主题、Material 组件和深色主题等功能。新的 Compose Material 3 Jetpack 库现已发布 Alpha 版,它基于 Material Design 3 规范,包括了更新后的主题、组件以及动态配色这类 Material You 个性化功能,旨在与新的 Android 12 视觉样式和系统界面相得益彰。接下来,我们将使用 Jetchat 来说明如何应用 Material Design 3 和 Material You
-
- 当 AndroidManifest.xml 文件中内容,发生非预期改变时,会带来意想不到的后果。例如:minSdkVersion 变小,上线后低版本 os 用户升级到最新 apk,导致严重的使用体验问题;targetSdkVersion 升高,os 对 app 运行时的特定处理发生变化,未适配代码 crash/功能异常;新权限被引入,隐私协议未声明,被监管机构发现。上述这些问题,都只是清单文件中一个“微小”的配置值变化引发,清单的腐化导致这类非预期变化,发生的可能性越来越高。manifest 治理正是围绕 AndroidManifest.xml 的内容整理与防控,逐步展开的
Android 13 deep dive: Every change, thoroughly documented
- 尽管谷歌刚刚发布了 Android 12L 的最终测试版,即针对平板电脑和其他大屏幕设备的功能更新,但该公司今天发布了 Android 13,即 Android 的下一个主要操作系统更新。最初的版本提供了我们对安卓 13 的第一印象,并为安卓平台引入了许多新功能、API 更新、用户界面调整和行为变化。在这篇文章中,我们将记录所有这些变化,这样你就可以为你的应用程序或设备做好 Android 13 的准备。
The 2022 Android Developer Roadmap — Part1
- 这篇主要是讲 2022 年 Android 该学什么,对应的 GitHub 地址:https://github.com/skydoves/android-developer-roadmap
Exploring Jetpack WindowManager for Foldable Devices
- 在新一代的可折叠设备中,提供对称屏幕并以独特方式一起工作的双屏设备特别有趣。但是,它们也带来了独特的挑战。这些可折叠、响应式用户界面的一个关键特征是,屏幕尺寸可以在运行时改变。这意味着应用程序应该在运行时识别屏幕的变化,这对于需要专注于业务代码的开发人员来说,可能是一个具有挑战性的功能。 为了应对这一挑战,谷歌提出了一个新的解决方案:Jetpack WindowManager。现在这个库已经进入稳定版,谷歌鼓励所有开发者采用 Jetpack WindowManager 的设备无关的 API、测试 API 和 WindowMetrics,这样你就可以轻松应对屏幕变化。 在这篇文章中,你将学习如何设置可折叠设备模拟器,以及如何使用 Jetpack WindowManager 库来为 Android 构建响应式 UI。
New Splash Screen Api for Android
- Google 开发的 Splash Screen 解决方案,虽迟但到…Splash Screen 是在移动设备上打开应用程序时出现的屏幕,有时它也被称为启动屏幕,在你刚刚打开应用程序后,在加载时显示出来
-
- 本文首先系统性的梳理性能分析中的可观测性技术,它涵盖数据类型、抓取方法以及分析方法等三部分内容,之后是介绍谷歌提供的「三大件」分析工具。目的是想让您了解不变的理论性的知识,以及与之对应的在安卓环境中可用的工具,这些可以让您少走一些弯路,直接复用前辈们的经验。
-
- 本文侧重阐述手淘团队对移动领域全链路技术理念的原创性引入,整篇约 1.2 万字、阅读需要 15 分钟,读者将收获移动技术域体验优化的思路转变,以及软件定义体验的沉淀和研发实践。
Fixing Performance Regressions Before they Happen
- 在 Netflix,我们为我们的可靠性感到自豪,我们希望保持这种状态。为此,我们必须防止在生产应用中出现重大的性能倒退,这一点很重要。缓慢的滚动或延迟的渲染令人沮丧,并引发意外的导航。不流畅的播放使观看节目变得不那么令人愉快。任何进入产品发布阶段的性能退步都会降低用户体验,所以挑战在于如何在产品发布前发现并修复这些退步。
- 这篇文章描述了 Netflix TVUI 团队是如何实施一个强大的策略,在产品发布之前快速、轻松地检测出性能异常–而且往往是在它们被提交到代码库之前。
“一把梭:REST API 全用 POST”
1. 这篇文章主要分成下面这几个部分:- 为什么要用不同的 HTTP 动词?
- Restful 进行复杂查询
- 几个主要问题的回应
- POST 更安全吗?
- 全用 POST 可以节省时间沟通少吗?
- 早点回家的正确姿势
- 工作而已,优雅不能当饭吃
APK 修改神器:插桩工具 DexInjector
1. 线下场景中,我们经常需要在 APK 中插入一些检测代码,来实现一些记录方法调用耗时,或者增加一些打印日志的功能。目前的常规做法都是在编译期修改 class 字节码达到,例如 byteX 提供了方便的修改 class 框架。
2. 但是,编译期修改灵活性不足,对于已经编译好的 apk 则无能为力,无法插桩或修改。导致很多业务方都要配置独立的 jenkins 打包后,才能触发进步一步的测试。一次自动化测试任务有将近一半的时间都消耗在打包过程中。
3. 为了解决这个痛点,我们开发了一套直接针对 APK(dex)插桩的工具,DexInjector。主要用来做一些日志、性能方面的数据采集和注入一些第三方工具,避免业务方二次打包,节省测试时间。
4. 该方案已经用在日志旁路、网络数据抓取、第三方库注入,用户信息注入、日常调试等。安卓长列表下快速精准锚定的解决方案
1. 淘宝拍照上线了新结果页后,原先的短列表进化成了电梯多楼层长列表结构。根据交互要求,当用户点击楼层 tab 时,需要将列表滚动到对应的位置,由于商品区块是支持分页加载的,当商品全部加载完成之后,商品区块会变得非常高,如果用户点击 tab 之后需要跨过商品区块,那么根据安卓原生的 scrollTo 实现,需要等待比较长的一段时间才能结束动画,对于用户来说成本较高,产品也无法接受。iOS 的列表组件默认限制了滚动时间,因此不需要做什么特殊处理。 除此之外,由于列表里的 ViewHolder 都是动态化的,每个坑位的高度在渲染完成之前是不确定的,因此当触发滚动时,Scroller 上一帧计算出来的滚动距离,下一帧由于坑位高度变化,已经不准确了,就会造成滚动停止后,停留在我们想要的位置上方或者下方。iOS 端由于实现方案特殊,在 UI 渲染前已经把所有卡片的高度都计算好了,所以没有这方面的困扰。有两个痛点需要我们解决- 如何快速滚动到指定位置
- 如何精准滚动到指定位置
Flutter 2.10 | 一文解读重点更新
1. 难以置信,Flutter 又发布稳定版了!让我们欢迎 Flutter 2.10 闪亮登场。距离我们上一个版本发布还不到两个月,但在如此有限的时间内,我们解决了 1,843 个问题,并合并了来自世界各地 155 位贡献者的 1,525 个 PR。感谢大家的出色工作,尤其是在 2021 年底的假期期间,仍有很多人在辛勤工作。
2. 这个版本带来了许多好消息,包括 Flutter 对 Windows 支持的重大更新、几项性能方面的重大改进、在框架中新增对图标和颜色的支持,以及一些开发工具的改进。此外,我们还会分享移除 dev 渠道工作的进展,开始停止对旧版 iOS 的支持,以及少量重大更新。让我们一起来揭开 Flutter 2.10 的面纱吧!不一样角度带您了解 Flutter 中的滑动列表实现
1. 本篇主要帮助剖析理解 Flutter 里的列表和滑动的组成,用比较通俗易懂的方式,从常见的 ListView 到 NestedScrollView 的内部实现,帮助您更好理解和运用 Flutter 里的滑动列表。本篇不是教您如何使用 API,而是一些日常开发中不常接触,但是很重要的内容。EventHub 代码原理详解
1. Android 系统基于 Linux 系统,由多个子系统组合而成,各子系统分工合作,在各自功能域中扮演关键角色。其中一个比较重要的子系统是 Input 子系统,正如其名地,挂载于 Android 的各输入设备的输入事件,会通过 Input 子系统传输到上层(Android 框架层或事件处理层)执行处理流程。
2. EventHub 在 Input 子系统中可以看做起到连结上下层的一个重要模块:对下,它监听 Input 设备的加入与删除,获取 Input 设备的输入事件;往上,它将输入事件整合由 InputReader 获取并分发至各 Android 上层服务或应用。简单来说,EventHub 的工作原理是,InputReader 中持续循环线程 loopOnce()调用 EventHub 的 getEvents(),该函数 epoll_wait 等待着 Input 设备的输入事件到来。EventHub 的工作又可以细分为监听新设备加入与监听设备事件获取两部分。一文读懂直播卡顿优化那些事儿
1. 本文可以带给大家一个相对全局的视角看待卡顿问题,认识到卡顿是什么、卡顿的成因、卡顿的分类、卡顿的优化和一些经验积累,有的放矢地解决 App 流畅性问题。接下来会从以下五个方面进行讲述:- 什么是卡顿
- 为什么会发生卡顿
- 如何评价卡顿
- 如何优化卡顿
在线“杀死 ” App 的卡顿难题!
1. ANR(Application Not Response)是安卓开发团队经常遇到的无响应问题,但却很难定位和根除。尤其是线上问题,由于难以复现,导致开发者难以有效地快速解决。为此,本⽂将为大家分享作者是如何在⼀个⽉内降低 50% 的 ANR 线上问题发⽣率的探索与实践,希望能对开发者有所帮助或启发。JakeWharton/diffuse
1. Diffuse is a tool for diffing APKs, AABs, AARs, and JARs in a way that aims to provide both a high-level view of what changes along with important detailed output.Android JVMTI 实现应用内存动态检
1. JVMTI 本质上是在JVM内部的许多事件进行了埋点,通过这些埋点可以给外部提供当前上下文的一些信息,甚至可以接受外部的命令来改变下一步的动作。
2. 外部程序一般利用 C/C++实现一个 JVMTI Agent,JVMTI Agent 的启动需要虚拟机的支持,在 Agent 里面注册一些 JVM 事件的回调。当事件发生时 JVMTI 调用这些回调方法。Agent 可以在回调方法里面实现自己的逻辑。 JVMTI Agent 是以动态链接库的形式被虚拟机加载的, Agent 和虚拟机运行在同一个进程中,虚拟机通过 dlopen 打开 Agent 动态链接库。Kotlin with MVVM application PART 1
1. 在这篇文章中,正如标题所说,我将尝试使用 MVVM 设计模式开发一个应用程序,并在 Github 上以开源方式分享。这篇文章会有点长,所以我将把文章分成几个部分。让我们首先解释一下我将在应用程序中使用哪些技术和库:MVVM design pattern; Jetpack Navigation, Retrofit, RxJava, Coroutine, Firebase, Firestore, View Binding, Koin, Picasso, Shared Preferences, LiveData折叠屏上应用设计规范
1. Android 的覆盖范围在递增,体验也在变得越来越好,现已有超过 2.5 亿台大屏设备搭载了 Android 系统,包括平板电脑、可折叠设备以及 Chrome OS 设备。如何适配不同的屏幕尺寸并保障良好的体验,一直以来都是开发者的一大难题。尤其随着可折叠设备等新兴产品的涌现,适配工作也愈发迫切。本文将重点介绍 Material Design 指南中更新的相关内容,并提供一些建议来帮助开发者按照自适应界面的原则来构建应用,从而解决在平板电脑和可折叠设备上的适配问题。Android 推出隐私沙盒
1. 今天,我们宣布了一项多年以来的计划,在 Android 上构建 隐私沙盒,旨在引入更新的、更具私密性的广告解决方案。具体来讲,这些解决方案会限制与第三方共享用户信息,并且能够在没有跨应用标识,包括广告 ID 的情况下运行。我们正在探索降低隐蔽数据收集可行性的技术,包括通过更加安全的方式来完成应用程序与广告 SDK 的集成。 Android 上的隐私沙盒建立在 已有的网页端的努力 之上,为改善用户隐私提供了一条清晰的路径,同时又不会影响用户对免费内容和服务的访问。现代 WorkManager API 已发布
1. 随着设备性能提升和软件生态发展,越来越多的 Android 应用需要执行相对更复杂的网络、异步和离线等任务。例如用户想要离线观看某个视频,又不想一直停留在应用界面等待下载完成,那么就需要以一定的方式让这些离线的过程在后台运行。再比如您想将一段精彩的 Vlog 分享到社交媒体,肯定也会希望视频上传时不会影响到自己继续使用设备。这就涉及到了我们今天分享的主题: 使用 WorkManager 管理后台和前台工作。本文将着重探讨 WorkManager 的 API 以及用法,帮助您深入了解它的运行机制,以及在实际开发中的使用方式ThreadLocal 源码分析以及可能引发的内存泄漏问题
1. ThreadLocal 和 Synchonized 相比,Synchonized 是利用锁机制,使变量或者代码块在同一时间只能被一个线程访问,而 ThreadLocal 是为每个线程提供了自己的变量副本,这样每个线程在同一时间访问的不是同一个对象这样来实现多线程对数据的共享问题。抽丝剥茧聊协程之深入理解 Continuation 原理
1. 本文尝试给大家讲明白,Kotlin 协程如何实现用同步的方式实现异步调用2022 年 React Native 的全新架构更新
1. 随着 RN 团队关于 深入了解 React Native 的新架构 文章的发布,这次新架构带来的调整主要在于以下四点:- JavaScript Interface(JSI)
- Fabric
- Turbo Modules
- CodeGen
经验分享 && 推荐阅读
过去一周个人阅读和收藏的非技术文章精选,扩展 Android 之外的知识和视野,不要给自己设限
- 视频 - 免费的性能增强是怎么来的?DLSS/NIS/FSR 技术解析
- Youtube 官方给创作者提供了 10 种赚钱的方式:Youtube 是全球最繁荣昌盛的内容创作平台,聚集了无数的创作者。这很大程度跟创作者可以在 Youtube 获得可观的收益有紧密的关系。一般的创作者都知道你可以通过广告来获得收入,也可以接第三方推广(业配)来挣钱,还可以开通会员去赚钱。但是很少有人知道按照 Youtube 官方的说法,不算任何第三方收入来源, Youtube 官方本身就给创造者提供了 10 种赚钱的方式
- IT 系统为什么需要可观测性?
- WeWork 的“大败局”:一篇狂人日记:
- 分享一下关于成都的工作和工资情况
- 面试算法,面试官都在考察些什么
- 从游戏机、计算机、智能手机的过去五十年 看 VR 和 AR 的未来五十年
- 视频 - 经验分享:非计算机专业的人如何转行程序员(宿琛) :宿琛是一个 90 后的程序员,他以前是学习金融的非程序员,后来爱上了写程序,但是在他读硕士的时候并没有学会编程,而且,工作的加班让他无法潜心学习,于是他开始了为期一年离职学习,在疫情期间通过学习美国大学的网课真正的成为了一个有深厚基础知识的程序员,这里是他的整个经历的分享。相信可以影响到更多的人
- 思考 | 泛精英社区「即刻」的高传播写作 (周刊 7 号) :真理或许不在少数人手中,但话语权绝对会一直在。互联网磨平了获取信息的门槛,但能够持久左右舆论动向、生产高传播力内容的,还是科技、政治与文化精英。
- 聊聊微软面试:很多人问我微软面试主要考察什么以及如何准备面试,这里我结合自身面试经历和在准备面试过程中查阅的大量资料做一个全面的总结。但是这里不会给出任何具体面试题目,主要担心具体的题目会把人的思维限制住,光准备那几道题目,结果面试的时候一个都没用上。我尽可能提供准备面试的最详细指导,有任何问题可以留言或私信我。
- 从多核到众核处理器:其实“多核”这个词已经流行很多年了,世界上第一款商用的非嵌入式多核处理器是 2002 年 IBM 推出的 POWER4。当然,多核这个词汇的流行主要归功与 AMD 和 Intel 的广告,Intel 与 AMD 的真假四核之争,以及如今的电脑芯片市场上全是多核处理器的事实。接下来,学术界的研究人员开始讨论未来成百上千核的处理器了。有一个与多核匹配的词叫片上网络(Networks on Chip),讲的是多核里的网络式互连结构,甚至有人预测未来将互连网集成到片上这种概念了。当然,这样的名词是很吸引眼球的,不过什么东西都得从实际出发,这篇文章也就简单地分析了为什么有多核这个事情,以及多核系统的挑战。
- 视频 - 三十而已,我的 AI 上岸之路–非科班大龄女青年转行人工智能的心路历程
- Useful Android Studio plugins
开发 Weekly
- Android Weekly-505 : https://androidweekly.net/issues/issue-505
- Android Weekly-506 : https://androidweekly.net/issues/issue-506
- Kotlin Weekly #290 : https://mailchi.mp/kotlinweekly/kotlin-weekly-290
- onCreate Digest - Issue #96 https://www.oncreatedigest.com/issues/oncreate-digest-issue-96-1032633
- Android What’s new this week? #14/02/22
书籍推荐
课程推荐
Google 官方提供的一系列免费课程,地址如下:https://developer.android.google.cn/courses
使用 Kotlin 进行高级 Android 开发
通过我们免费的使用 Kotlin 实现高级 Android 开发自学培训,将您的 Android 编码技能提升到一个新的水平。该课程使用 Kotlin 编程语言,为您介绍 Android 上的通知、图形和动画,教您如何登录用户、向应用添加映射以及如何正确测试应用。每节课都包含一个在 GitHub 中提供解决方案代码的教程。
Android Kotlin 基础知识
通过我们免费的 Android Kotlin 基础知识自学培训,学习使用 Kotlin 编程语言的基本 Android 编程概念,并构建各种应用。每个 Codelab 都包含一个在 GitHub 中提供解决方案代码的教程。
Android 开发者基础知识 (Java)
通过我们免费的 Android 开发者基础知识自学培训,学习使用 Java 编程语言的基本 Android 编程概念。您可构建各种应用,从构建最基本的 Hello World 开始,一直到构建能够预定作业、更新设置和使用 Android 架构组件的应用。每节课都包含一个 Codelab,该 Codelab 在 GitHub 中提供解决方案代码,并提供概念文档和幻灯片。
高级 Android 开发 (Java)
通过我们免费的高级 Android 开发自学培训,将您的 Android 编码技能提升到一个新的水平。该课程使用 Java 编程语言,教您拓展用户体验、改善应用性能以及添加自定义视图、动画和位置感知等功能。每节课都包含一个教程,该教程在 GitHub 中提供解决方案代码,并提供概念文档和幻灯片。
面向初学者的 Android 开发
面向志向远大的 Android 开发者的免费自学系列课程。了解如何构建首个 Android 应用、为应用添加功能、连接到互联网以及设置数据库。
Android 基础知识纳米学位
如果加入 Android 基础知识纳米学位计划,您将获得指导和帮助,助您顺利通过 Udacity 的 Android 初级课程。此计划是帮助您构建第一批应用并获得纳米学位的绝佳方式。
面向编程人员的 Kotlin 训练营
通过这一免费的自学系列 Codelab,了解 Kotlin 的基础知识。无论您是 Java 开发者还是其他面向对象的语言的编程人员,本课程都能帮助您了解使 Kotlin 如此受开发者欢迎的功能。学完本课程后,您将掌握使用 Kotlin 构建下一个项目所需的技能。
使用 Kotlin 开发 Android 应用
了解如何通过经过行业验证的工具和库用 Kotlin 构建和开发 Android 应用。尝试使用这些 Kotlin 技巧,更快速地创建 Android 应用,同时减少错误和代码。
定时打鸡血
问题的根本原因在于,在现代社会中,愚蠢的人都很自信,而聪明的人却充满了怀疑。

知识星球
一个多月已经有 142 个人了,不容易不容易,多谢各位的支持,各项内容正在持续更新中,争取在今年把这个星球的名声做起来
投稿指南
欢迎投稿分享您的:
- 技术博客
- 实践经验
- 工具推荐
投稿方式:
- 公众号后台回复”投稿”
- 本周刊下面留言
- 发邮件:dreamtale.jg@gmail.com
- 微信联系:Gracker_Gao
关于作者
下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!
- 掘金 - Gracker
- 知乎 - Gracker
- 个人博客 - Android Performance
- 个人介绍 - 欢迎加微信群组多多交流
- Android 性能优化必知必会
- 微信公众号 Android Performance

- Android 性能优化知识星球
版权声明
- 本周刊遵循 CC BY-NC-SA 4.0 协议
- 转载请注明出处:Android Weekly
- 欢迎订阅、分享,让更多开发者受益