【发布时间】:2019-09-16 04:24:24
【问题描述】:
TL;DR:有没有比使用ZipInputStream 更高效的方法将包含数千个文件的 zip 文件从 Android 资产复制到内部存储?
我的 Android 应用有几个资产需要在首次启动时复制到设备存储中。它们以 zip 文件的形式存储在 assets 中,并通过 ZipInputStream 复制,如 here 所述(在 unzip 方法中)。有 10 个 zip 文件,共 36MB,解压/复制过程大约需要 3 秒。
问题:我需要添加一个 39MB 的新资产,但它增加了大约 30 秒的过程。我的直觉是,这是因为资产包含 5500 个文件(平均每个文件大约 7KB)。由于我在启动时需要这些资产,因此不能在后台服务中运行它,而且 30 多秒的时间才能显示启动画面。
This post 建议使用ZipFile 而不是ZipInputStream,但正如here 和其他S/O 帖子所述,它在Android 中似乎无法正常工作,而且我遇到了与那里描述的相同的ZipException(注意这个在将 zip 文件复制到内部存储之后 - Android 资产仅提供流,而不是文件,因此必须先从资产中复制 zip,然后才能使用 ZipFile 方法)。
有没有更有效的方法来解决这个问题?
【问题讨论】:
-
如果您在文件系统中需要这么多文件,那么使用它们的代码就会出现问题。重新编写该代码,使其直接从 ZIP 文件或资产中加载文件。
-
Android APK 文件已经是 ZIP 格式的存档。或许解决方案是不要将 ZIP 文件放在
assets/中,而是将这些 ZIP 文件的解压缩内容放在assets/中。然后,也许您可以就地使用它们,或者您至少可以在启动期间复制这些资产的最少数量。
标签: android unzip android-assets