咱们在 Android 10 中首次引入了 “ 分区存储 ” 的概念,旨在爱护利用和用户数据并缩小文件凌乱。自此之后咱们收到了开发者们的贵重倡议,这些倡议有助于咱们对该性能的继续优化,非常感谢大家!基于反馈,咱们在 Android 11 上做了一些值得注意的改良。例如,咱们启用了对媒体文件的 间接文件门路拜访性能,用于改善现有代码和程序库的兼容性。咱们了解许多利用在采取分区存储计划前须要有周密的计划,以便继续撑持现有用户的拜访,确保合乎以后存储计划的最佳实际以及向后兼容性。
基于与开发者们的探讨和在开发者论坛上的沉闷探讨,咱们筹备了这份无关存储的常见问题和解答,以帮忙您更好地理解分区存储的各种能力、行为变动和一些限度等。咱们在过来的文章推送里公布过对于 Android 存储计划的最佳实际,您能够先回顾一下最佳实际的这篇 文章。
分区存储容许利用通过 File API 应用文件门路拜访文件吗?
咱们意识到某些利用会通过代码或程序库间接拜访媒体文件门路。因而,在 Android 11 上,领有可读取内部存储权限的利用,均可在分区存储环境中通过文件门路拜访文件。在 Android 10 的设施上,除非在 manifest 中通过被动申明 requestLegacyExternalStorage
属性来抉择停用分区存储,否则上述办法是有效的。
为了确保不同 Android 版本间的连续性,如果您利用的指标版本是 Android 10 或者是更高版本,您应该抉择不启用。更多详细信息,请参阅文末相干浏览 Android 存储计划的最佳实际高低篇。
与媒体存储 API 相比,文件门路拜访的性能体现如何?
性能体现十分依赖具体利用场景。对于像视频播放这样的领有程序读取的操作,文件门路拜访的性能体现与媒体存储相差无几。然而在随机读写的情境下,采取文件门路的办法最多可慢一倍。为了最快、最稳固的读写,咱们举荐您应用 Media Store API。
我的利用须要宽泛地访问共享存储,存储拜访框架是我惟一的抉择吗?
存储拜访框架 (简称 “SAF”) 用于用户授予对目录和文件的拜访权限,然而须要您留神的是,SAF 对某些目录的受权仍存在限度,例如根目录和 Android/data
目录。虽说大多数利用在存储拜访时都能够通过咱们最佳实际的形式去实现,例如应用 SAF 或媒体存储 API,但在某些利用场景下可能会须要更宽泛地访问共享存储,亦或是无奈通过最佳实际来无效地拜访。针对上述情况,咱们减少了 MANAGE_EXTERNAL_STORAGE
权限,容许程序拜访内部存储上的所有文件 (除了 Android/data 和 Android/obb 目录)。咱们在 7 月公布了一个 Google Play 政策更新,提到了对于存储的相干内容,请点击 这篇微信文章 查看。
哪些类别的利用应该申请 MANAGE_EXTERNAL_STORAGE 权限?
MANAGE_EXTERNAL_STORAGE
权限实用于外围利用场景须要宽泛地拜访设施上的文件的状况,但应用分区存储的最佳实际无奈高效地实现此性能的那些利用。当然,列出所有可能的利用场景是不切实际的,但其包含了文件管理器、备份和还原、反病毒程序或生产力文件编辑器等应用场景。
应用 Storage Access Framework (存储拜访框架),是否须要 Google Play 的政策批准?
Storage Access Framework (存储拜访框架,简称 SAF) 从 Android 4.4 开始就曾经存在。通过 SAF 拜访文件时,会让用户参加文件抉择,从而使用户能够更好地管制文件的拜访。Google Play 上没有与之相干的政策。
与 Android 10 相比,在 Android 11 上应用 SAF 会有其余限度吗?
指标版本为 Android 11 (API 级别为 30) 并应用 SAF 的利用,将不会被授予某些目录拜访权限,例如 SD 卡上的根目录和下载目录。无论是哪个指标 SDK,都无奈在 Android 11 上通过存储拜访框架拜访 Android/data 和 Android/obb 目录。拜访 官网文档 理解对于这些限度和测试相干行为的办法。
利用该如何测试分区存储的变动?
通过这些 兼容性标记,利用能够测试与间接文件门路拜访或媒体存储 API 相干的分区存储行为。还有另一个 兼容性标记,也可用来测试应用存储拜访框架拜访某些门路时的限度。
分区存储中的利用,是否仅限于将文件写入其利用 data 目录上?
在分区存储中,利用能够将 媒体项增加 到媒体存储汇合。媒体存储会依据文件类型,将文件搁置于组织有序的文件夹中,例如 DCIM、Movies 和 Download 等。对于所有此类文件,利用能够持续通过文件 API 来拜访。得益于零碎为每个媒体存储文件赋予了利用属性,利用不须要有存储权限也能够读写到它们最后提供给媒体存储的文件。
Data Column 弃用之后,有没有对此性能的其余应用倡议?
在 Android 10 上,位于分区存储环境中的利用无奈通过文件门路拜访文件。为了与这一设计保持一致,咱们随后废除了 DATA column。依据大家的反馈,即须要应用已有的 native 代码或程序库,Android 11 现已反对在分区存储中的利用拜访文件门路的性能。相应地,DATA Column 实际上在某些状况下其实是有用的。为了在媒体存储中插入和更新,应用分区存储的利用应应用 DISPLAY_NAME 和 RELATIVE_PATH Column,它们不再须要应用 DATA Column 来实现此性能。当读取磁盘中文件的媒体存储实例时,DATA Column 将具备无效的文件门路,该门路可被文件 API 或 NDK 文件程序库应用。但利用要筹备解决任何对于此类操作带来的 I/O 谬误,而且不应该假如文件始终是可用的。
对于抉择退出分区存储的利用,它们何时开始必须兼容分区存储?
在运行 Android 11 或更高版本的设施上。当指标版本被设置为 Android 11 或更高版本时,利用便会被放入到分区存储中。
倡议应用什么办法来迁徙分区存储之外的数据?
preserveLegacyExternalStorage 标记容许利用在降级零碎时保留原有存储权限,即便是降级至 Android 11。须要留神的是,在 Android 11 上这个标记对新装置的利用起不到任何作用。将指标版本设为 Android 11 之前,请批改代码以适配分区存储。请参阅文末相干浏览 Android 存储计划的最佳实际高低篇,来获取数据迁徙最佳实际的相干信息吧。
针对某些软件包安装程序 (例如利用商店) 须要拜访 Android/obb 目录,是否有任何例外情况?
持有 REQUEST_INSTALL_PACKAGES 权限的利用能够拜访其余利用的 Android/obb 目录。请留神,此权限享有签名级别的爱护。
咱们心愿您打算适配分区存储时这份 FAQ 能为您提供一些帮忙。请点击浏览原文或查看文末相干阅读文章,理解咱们的最佳实际文档。