在旧的项目代码中,在“可绘制”文件夹中使用了一些图像,而在“ mipmap”文件夹中使用了一些图像。有时,我有疑问并搜索文章。但是我不够理解。最近,我尝试找到它。因此,我一一检查了文章的内容,发现实际结果远非结论。
几个共同的结论
案例1可消除其他密度,MIPMAP将保留所有(最终结论与此有关)
当XHDPI密度电话加载此APK时,Google具有优化功能,可以删除可绘制的文件夹中的其他密度文件,只需保留一个基本的可绘制和可借助的XHDPI文件夹,但是MIPMAP将保留所有内容。 p>
检测方法也相对简单。将相同类型的图像(带有标签的图像文本)放在文件夹中,以绘制和MIPMAP的不同密度文件夹,然后检查此安装程序包和应用程序大小
case1.1安装软件包和应用程序大小
安装程序包大小 | 应用程序大小 | |
---|---|---|
绘制 | 13.3 MB(14,016,841字节) | 14.04MB |
mipmap | 13.3 MB(14,017,191字节) | 14.04MB |
结论1.1
考虑到两个安装软件包的大小略有不同,考虑到图像本身的大小(每个图像都超过1MB),但可以认为,放置在可绘制和MIPMAP中的图像之间没有区别安装应用程序后的文件夹。
case1.2应用程序内绩效
排除安装程序包情况,让我们看一下应用程序中的性能(使用adb shell wm density
来确保密度而不更改其他信息)。
100 | 420 | 800 | |
---|---|---|---|
绘制 | |||
mipmap |
结论1.2
从此可以看出,无论文件放入哪个文件夹,都将正确显示为手机上的匹配图像资源。
案例1.3应用程序内缩放
如果图像视图具有缩放动画,则使用绘制下的图像,将连续使用一个图像来扩展图像以实现图像视图缩放动画。
如果您在MIPMAP下使用图像,则将自动选择具有最接近当前分辨率的图像,并且比当前分辨率大于当前分辨率。
这个结论可能不是一个普遍的结论,但是由于有说法,让我们进行测试。
可绘制
较小的缩放比率 | 大缩放比率 |
---|---|
mipmap
较小的缩放比率 | 大缩放比率 |
---|---|
结论1.3
可以看出,整个缩放动画过程中都显示了相同的动画。
案例2申请性能
Google已经优化了MIPMAP图像的性能,以使其表现更好。
可绘制
性能概述 | 记忆 | 加载10张图像的平均时间 |
---|---|---|
146 |
mipmap
性能概述 | 记忆 | 加载10张图像的平均时间 |
---|---|---|
151 |
结论2
可以看出,在系统加载单个图像的情况下,它们的性能基本相同,除了此图像太小或太少以至于显然优化性能。但是,即使在反复加载图像的情况下,性能仍然相似。也许优化仅适用于特定类型的图像?如果您知道更多细节,请随时与我交流。
case3发射器图标
在研究时,发现通常建议使用Minmap文件夹来包括应用程序的启动器图标,这种方式可以使性能更好地优化。
100dpi | 420dpi | 800dpi | |
---|---|---|---|
结论3
可以看出,在不同的DPI设置中,应用程序图标的显示是一致的,而切换应用程序图标的边界值也是一致的。至于为什么420DPI和800DPI相同的情况,因为在选择图像资源时,由于各种原因,应用程序图标需要扩大约25%。 1
在这一点上,您可能有与我相同的疑问。由于在可绘制和MIPMAP下的图像的性能是相同的,无论是在安装程序包中还是在应用程序本身中,甚至官方文档也是如此,为什么各种测试结果表明两者的性能基本一致?<<<<< /strong>
罪魁祸首:束(.aab)
如果您不使用Google Play推动您的APK(像我一样),那么您将不熟悉此事。甚至许多以前在Google Play上发布应用程序的人也不熟悉它。实际上,每当我们手动打包应用程序时,这实际上都会出现。
简单地说,.AAB软件包通常用于Google Play商店。当您从Google Play商店下载应用程序时,它将根据手机的实际用法下载不同的可抽取资源,以减少安装软件包的大小。 (通常,手机的DPI不会更改,直到卸载该应用程序之前,将不会使用其他资源密度。)
以下测试中使用的工具是BENTLETOOL 2 ,它模拟了从Google Play下载和安装应用程序的过程。
安装软件包的比较
安装软件包(APK)大小 | 应用程序大小 | |
---|---|---|
绘制 | 5.91 MB(6,201,543Å) | 6.22MB |
mipmap | 12.6 MB(13,230,670Å) | 13.26MB |
应用内性能
100 | 420 | |
---|---|---|
绘制 | ||
mipmap |
可以看出,当图像在可绘制的文件夹上使用时,通过.AAB软件包安装的应用程序将小于minmap文件夹中使用的应用程序,并且当更改应用程序中的DPI时,它不能更长的时间根据当前DPI自动选择相应的图像。
结论
基于上述测试,我们可以得出以下结论。
以下结论不涉及与MIPMAP相关的性能优化(主要是因为我们尚未设计明确的比较测试)
测试电话型号是像素7,测试的Android版本为13
- 当应用程序是作为.APK构建时,无论是在应用程序中还是在启动器中(应用程序图标),绘制或MIPMAP文件夹之间没有区别
- 当应用程序作为.AAB构建时,可绘制的文件夹中的资源将寻找匹配的设备密度,并将删除无与伦比的资源以确保.APK的大小。但是,将保留MIPMAP文件夹中的所有资源文件。
我们可以将使用的图像放在应用程序中的任何目录中吗?
如果您的应用程序是通过.APK分发和安装的,则原理没有差异。但是,Google还推荐了相关目录的说明,如下所示:
正如我们所看到的,MIPMAP目录只能原则上保存应用程序图标。同样,他们的official projects和single density resource projects也以这种方式使用这两个文件夹。
.AAB软件包中MIPMAP文件夹的保留机制仅适用于应用程序图标吗?
测试后,可以发现MIPMAP的保留机制适用于MIPMAP下的所有图像资源,无论它们是否是应用图标。
可以在我的GitHub上访问相关代码。