Android Weekly #29
技术文章
- Improving App Performance with Baseline Profiles
- Google 发布的一个新的库,帮助 App 开发者主动生成 Baseline Profile ,以优化 App 的启动速度。之前这个文件是 Google 在 Play Cloud 生成,然后下发给用户的,所以存在不准确的现象。现在利用这个工具,开发者本地就可以生成和调试。简单来说就是尽量减少启动阶段的 jit,对应的代码逻辑可以看这篇文章:https://source.android.google.cn/devices/tech/dalvik/jit-compiler?hl=zh-cn
- Android Architecture Pattern
- 介绍了目前 Android App 架构,包括 Single Activity Architecture、View State Architecture、Clean Architecture in Android、Flow of data、Modularisation In Android 等
- 【线上故障】通过系统日志分析和定位
- 本文分享另外一种更为棘手的线上问题解决方案-如何在没有 coredump 文件的情况下,定位程序崩溃原因
- 向工程腐化开炮 | proguard治理
- 工程腐化是app迭代过程中,一个非常棘手的问题,涉及到广泛而细碎的具体细节,对研发效能&体验、工程&产物质量、稳定性、包大小、性能,都有相对“隐蔽”而间接的影响。一般不会造成不可承受的障碍,却时常蹦出来导致“阵痛”,有点像蛀牙或智齿,到了一定程度不拔不行,但不同的是,工程的腐化很难通过一次性“拔除”来根治,任何一次“拔除”之后,需要有效的可持续治理方案,形成常态化的防腐体系。
- 工程腐化拆解来看,是组成app的代码工程中,工程结构本身,以及各类“元素”(manifest、代码、资源、so、配置)的腐化。优酷架构团队近年来,持续在进行思考、实践与治理,并沉淀了一些技术、工具、方案。现逐一分类汇总,辅以相关领域知识讲解,整理成为《向工程腐化开炮》系列技术文章,分享给大家。希望更多同学,一起加入到与工程腐化的这场持久战中。
- 本文为系列文章首篇,将聚焦于java代码proguard,这一细分领域。对工程腐化,直接开炮!
- Jetpack DragAndDrop 库——拖放操作如此轻松!
- 我们将为您介绍目前处于 Alpha 阶段的 Jetpack DragAndDrop 库,帮助您更轻松地在应用中处理拖放数据。拖放是最基本的手势操作,用户可以点击并按住图片、文本或其他数据元素,然后将其拖动至另一个应用 (或者同一个应用的其他位置) 并松手,即可将数据放置到新的位置上。手势通常在触摸屏上表现为长按,在使用鼠标时则为点击并拖动。
- High performance with idiomatic Kotlin
- 本文包括以下细节:(I)为什么高性能在我们构建软件产品时是必不可少的,(II)性能问题最常见的原因概述,(III)如何衡量性能,以及(IV)Kotlin如何帮助我们通过以习惯的方式编写可维护的、安全的、有表现力的Kotlin代码来构建优质产品。
- What’s new in Android 12
- Android 12 的新内容,不过话说 Android 13 都出来了…….
- 抖音 Android 性能优化系列:启动优化之理论和工具篇
- 启动性能是 APP 使用体验的门面,启动过程耗时较长很可能导致用户使用 APP 的兴趣骤减,抖音通过对启动性能做劣化的 AB 实验也验证了其对于业务指标有影响显著。抖音拥有数亿的用户,启动耗时几百毫秒的增长就可能带来成千上万用户的留存缩减,因此,启动性能的优化成为了抖音 Android 基础技术团队在体验优化方向上的重中之重。
- 本文基于过往对抖音 Android 客户端做启动性能优化的实战经验总结提炼出普适性的方法论,并将该过程中沉淀的工具加以分享,希望能给大家带来一些新的思考。
- eBPF是什么?为什么对可观测性很重要
- Extended Berkeley Packet Filter(eBPF)是一种内核技术(从 Linux 4.x 开始),它允许程序在无需更改内核源代码,或添加额外模块的情况下运行。你可以将其视为 Linux 内核中的轻量级沙箱虚拟机(VM),程序员可以在其中运行 BPF 字节码,从而利用特定的内核资源。
- 使用 eBPF 消除了更改内核源代码的需要,并简化了软件利用现有层的能力。因此,它是一项强大的技术,有可能从根本上改变网络、可观察性和安全性等服务的交付方式。
- 下面详细介绍一下它是什么,它是如何工作的,以及何时考虑实施它。
- android-inline-hook
1. shadowhook 字节跳动新开源的一个 hook 库,是一个针对 Android app 的 inline hook 库。其特性如下- 支持 Android 4.1 - 12 (API level 16 - 31)。
- 支持 armeabi-v7a 和 arm64-v8a。
- 支持针对函数整体的 hook,不支持对函数中间位置的 hook。
- 支持通过“函数地址”或“库名 + 函数名”的方式指定 hook 位置。
- 自动完成“新加载动态库”的 hook(仅限“库名 + 函数名”方式),hook 完成后调用可选的回调函数。
- 可对同一个 hook 点并发执行多个 hook 和 unhook,彼此互不干扰(仅限 shared 模式)。
- 自动避免代理函数之间可能形成的递归调用和环形调用(仅限 shared 模式)。
- 代理函数中支持以正常的方式回溯调用栈。
- 集成符号地址查找功能。
- 使用 MIT 许可证授权。
- 【解惑】App处于前台,Activity就不会被回收了?
1. 现象:App 打开多个 Activity,然后手机晾一边,过一段时间后(屏幕常亮),点击回退,之前的 Activity 空白,然后重新加载了。App 在前台,不在栈顶的 Activity 却被干掉,但进程还健在
2. 结论- 系统内存不足时,直接在内核层查杀(回收)进程,并不会考虑回收哪个Activity;
- 进程内存不足时,如果此进程 Activity Task数 >= 3 且 使用内存超过3/4,会对 不可见 Task进行回收,每次回收 1个 Task,回收时机为每次gc
- JankStats Goes Alpha
1. 恋猫de小郭翻译版本:https://mp.weixin.qq.com/s/w8a1zWYgmmwrajLhEdGqhA
2. JankStats:「第一个专门用于检测和报告应用在用户设备上的性能问题而构建的 AndroidX 库。」,JankStats 是一个相对较轻的库,主要有三个目标:- 捕获每帧性能信息
- 可以运行在用户设备上
- 在应用程序出现性能问题时启用检测和报告发生的情况
- Jetpack Compose 1.1 is now stable!
1. 都 1.1 版本了……
经验分享 && 推荐阅读
- 2022 年计划
- 拆掉知识的墙
- 5000字详解性能需求
- 如何更好地工作 -#6
- 如何在某一领域成为世界顶尖 -#5
- Android 手机的自适应高刷,为什么没能讨好用户?
- flomo 的 2021 和 2022
- 产品沉思录精选:如何管理需求优先级 | RICE方法
- 反向面试:你有什么问题要问面试官的?
开发 Weekly
Podcast
书籍推荐
工具推荐
- Dev on Windows with WSL : 在 Windows 上用 WSL 优雅开发
视频推荐
【李自然说】人生如逆旅,我亦是行人 https://www.youtube.com/watch?v=JGHTcNmCcLU
里面提到的几个李自然自己身体力行的做事方法,确实很厉害的一个人:
- 不给自己设限,能快速融入到更有潜力的行业
- 向顶级的人 拼命地学习
- 拼命地打开自己的视野和格局
- 拥抱变化,甚至主动去求变
- 一直坚持做,就会有一个长期的口碑
- 提高容错率
定时打鸡血

投稿指南
欢迎投稿分享您的:
- 技术博客
- 实践经验
- 工具推荐
投稿方式:
- 公众号后台回复”投稿”
- 本周刊下面留言
- 发邮件:dreamtale.jg@gmail.com
- 微信联系:Gracker_Gao
关于作者
下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!
- 掘金 - Gracker
- 知乎 - Gracker
- 个人博客 - Android Performance
- 个人介绍 - 欢迎加微信群组多多交流
- Android 性能优化必知必会
- 微信公众号 Android Performance

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