1. Linux 内核内存规整详解
内存规整是一个较重内存碎片优化措施,在使用时内核较为谨慎,当前有直接内存规整、kcompactd 内存规整、预应性内存规整及主动内存规整四种场景,这些场景涵盖在内存分配、内存回收等上下文,由于规整的诉求和紧迫程 度不同,其通过 compact_control 结构体参数控制 compact_zone 内存规整行为包括但不限于内存扫描范围、页迁移的能力、迁移页是否适合规整及是否可以阻塞等等。
另一方面,内存规整的核心逻辑在于迁移页扫描器(migrate scanner)和空闲页扫描器(free scanner)运作原理,包括哪些页可以作为迁移页或空闲页,何时内存规整结束等等这些直接影响对内存规整理解。
2. iOS Crash 治理:淘宝 VisionKitCore 问题修复
本文通过逆向系统,阅读汇编指令,逐步找到源码,定位到了 iOS 16.0 < iOS 16.2 WKWebView 的系统 bug 。同时苹果已经在新版本修复了 Bug,对于巨大的存量用户,仍旧会造成日均 Crash pv 1200+ uv 1000+, 最终通过 Hook 系统行为,规避此 Bug。在手机淘宝双 11 版本中已经彻底修复,Crash 跌 0。
3. 如何使用 PHPicker 在 iOS 系统无授权下获取资源
本文要点包含以下:
- PHPicker 是 iOS14 开始引入的新组件,它允许在不需要用户授权的情况下访问照片库的所有资源;
- 使用 PHPicker 的正确方式是通过 PHPickerViewControllerDelegate 回调返回的 NSItemProvider 来获取所选资源,而不是通过 PHAsset 来获取,后者需要提前获取用户的相册访问授权;
- 通过 NSItemProvider 可以判断资源类型,加载资源数据或文件 URL,获取图片、视频等多媒体资源;
- 对于图片,可以通过 loadDataRepresentation 获取 Data,并利用该 Data 获取图片元数据信息。对于视频,可以通过 loadFileRepresentation 获取 URL,并利用 URL 获取 AVAsset;
- 通过 UTType 可以进一步判断特殊格式资源如 webp、gif 等进行不同处理;
- 可以通过 NSProgress 监听资源加载进度;
- 正确使用 PHPicker 可以避免引起用户疑惑,提高用户体验,是 iOS14 访问多媒体资源的推荐方式。
总之,本文详细介绍了在 iOS14 中如何正确使用 PHPicker 访问用户选择的部分照片资源,其要点是不需要提前获取授权,通过 NSItemProvider 处理多媒体资源,这是一种更符合系统设计初衷和提高用户体验的方式。
4. 云音乐 Android Cronet 接入实践
Cronet 是 google chromium 的网络组件,可单独编译成库提供给 Android/Ios 应用使用。Cronet 在 chrome 中经过多年的打磨,稳定性得到了验证,同时 Cronet 支持 QUIC 协议,可以支持后期对弱网场景进行专项优化。安卓端作为 Cronet 的首先落地一端,已经全量在线上运行了一年多的时间,本文主要介绍接入方案和过程中解决的问题。
5. 深入理解 Netty FastThreadLocal
本文以线上诡异问题为切入点,通过对比 JDK ThreadLocal 和 Netty FastThreadLocal 实现逻辑以及优缺点,并深入解读源码,由浅入深理解 Netty FastThreadLocal。
6. 安卓 camera2 获取到的 YUV420_888 格式详解
安卓音视频开发中的一个环节是摄像头采集数据,而 Android 平台上摄像头采集的 API 有两套,camera1 和 camera2。本文主要讲的是 camera2 这套 API 在采集数据并指明 YUV420_888 格式时,获取到的摄像头 YUV 数据格式具体是怎么样的。
7. 视频号直播:如何进一步降低功耗占用?
本文在不影响现有用户体验和业务逻辑的情况下,通过扩展系统接口的能力与实验调试分析,「最终实现了一套 UI 动画的帧率调节方案。」 该方案得到的效果是:
快速改造既有业务的所有动画,动态的控制各自的帧率; 最终达到不影响效果的前提下,尽可能的降低了功耗; 同时极大的减轻了业务开发同学适配多系统和改造动画的工作量。 该方案最终在「视频号直播上得到广泛应用,取得了较大的性能提升。」
8. 深入理解 iOS Jetsam 机制,助力提升 Flotsam 召回率
本文首先介绍了 OOM、Jetsam、Flotsam 的相关概念,详细介绍了 Jetsam 的实现原理,针对 Jetsam 中的 per-process-limit、vm-pageshortage、disk-space-shortage、vnode-limit 这四种系统强杀类型展开介绍了对应的实现原理、触发阈值以及我们的召回策略。通过对上述强杀类型召回过程的描述,我们可以总结出一套通用的召回方法,适用于其他未知的异常退出类型。即调研实现原理 -> 确定触发阈值 -> 制定召回策略。原理调研清楚并确定阈值后,制定召回策略就变得简单了。
9. 网易云信 Android 硬件适配实践
本文主要介绍了云信 RTC SDK 中视频硬件适配遇到的几个问题以及对应的解决方案