【发布时间】:2018-05-28 13:08:06
【问题描述】:
我有带有资产的 Android 应用。它们包含 20,000 多个文件,其中大多数是简单的文本或 png 文件,它们被分成不同的文件夹和子文件夹。 1个单个文件最大500kb,90%在2kb左右。
示例结构
Data
... subfolders with 20k+ files
StartData
.... FolderA
........ 5 files *.txt
.... FolderB
........ 5 files *.txt
.... a.xml
.... b.xml
问题是应用程序的加载时间。在应用加载期间,我需要从StartData 目录中打开大约 20 个文件并从中读取设置。它们位于 2 个 xml 文件中,根据 xml 中的信息,我从两个子文件夹 FolderA / FoldeB 打开附加数据。
但是,速度很差,应用启动时间至少是没有资产的 3-4 倍。
在以前的版本中,我在 raw 目录中有 zip,它在第一次运行到文档目录时被解压缩。第一次运行很慢,但其他运行很快。这个解决方案的问题是安装速度太快,因为在旧手机上进行解压缩最多需要 5 分钟,并且在此过程中它不会死机。如果是这样,则应用程序已损坏并且数据仅部分解压缩,因此我放弃了此解决方案。
使用我以前的方法,如果解压缩正确完成,冷应用启动大约需要 5 秒。现在,有了资产,最多需要 20 秒。有什么解决办法吗?
我在 gradle 中禁用了资产压缩(我只有 *.txt、*.png 和 *.xml 文件)
aaptOptions{
ignoreAssetsPattern ''
noCompress 'txt', 'png', 'xml'
cruncherEnabled = false
}
但进步很小。
另外,我正在使用 NDK (JNI) 和 AssetManager 在 C++ 中加载我的资产。在 C++ 中打开资产的解决方案取自:http://www.50ply.com/blog/2013/01/19/loading-compressed-android-assets-with-file-pointer/
【问题讨论】:
-
这20.000是否影响速度?如果您在资产中仅使用 10 个文件进行测试,那么加载时间是多少?
-
@greenapps 好像不是。
标签: android c++ android-ndk