Android 的 Storage Access Framework 性能,SAF 文档选择器的卡顿问题
Android 的 Storage Access Framework 性能,SAF 文档选择器的卡顿问题
如果你在 Android 11 的低端机上触发一个 ACTION_OPEN_DOCUMENT 的 Intent,大概率会经历三秒以上的白屏,或者盯着一个卡在标题栏下方的 ProgressBar 发呆。这不是你代码写得有问题,也不是系统内存不足导致的偶发现象。这是 Android 的 Storage Access Framework(SAF)在 Scoped Storage 时代留给所有开发者的「标准体验」。更让人无奈的是,这个体验在文件数量多、云存储应用繁杂的设备上,会随着时间推移变得越来越差。
Scoped Storage 之后,SAF 成了唯一的官方通道
SAF 本身并不是一个新东西。它在 Android 4.4(API 19)就已经存在,设计初衷是提供一个统一的文档访问抽象,让本地文件、云存储、局域网资源能够以相同的 DocumentsProvider 接口暴露给用户。这个想法在十年前看起来很有野心,但在当时并没有引起太多波澜,因为绝大多数开发者会直接绕过它,用 java.io.File 或者 MediaStore 访问公共目录。真正让 SAF 从「可选方案」变成「必经之路」的,是 Android 10(API 29)强制执行的 Scoped Storage。
Android 10 开始,Google 大幅收紧了对外部存储的访问权限。公共目录的直接文件路径访问被限制