在发送到移动设备之前压缩图像的常见做法


Common practice to compress image before sending to mobile device?

我的应用程序需要从服务器下载许多图像(每个图像大约10kb大)。我只是在没有任何优化的情况下,用独立的AsyncTask下载它们中的每一个。

现在我想知道转移这些图像的常见做法是什么。例如,我正在考虑将压缩后的图像保存在服务器上,然后发送压缩后的文件给用户的手机进行解压缩。在这种情况下,将zip文件合并为一个大的zip文件供用户下载是否更好?

或者有更好的解决方案?提前感谢!

编辑:

组合zip文件似乎是个好主意,但我觉得用户可能需要很长时间才能下载并解压缩所有图像。所以我可以在每个zip文件中放入十到二十个图像,这样用户就可以在等待更多图像的同时看到一些下载的图像。让多个AsyncTask一起发射可以更快,对吧?但即使给定相同的文件大小和相同的下载地址,它们也不会在同一时间完成?

由于延迟通常是移动连接的最大问题,因此减少必须打开的连接数量是优化加载时间的好方法。发送一个包含所有图像的zip文件听起来是一个非常好的主意,并且可能值得花时间来实现。

图像可能已经被压缩(gif、jpg、png)。您不会减少文件大小,但会减少连接数。这对移动来说是个好主意。如果总是同一组图像,你可以使用一些sprite技术(发送一个更大的图像文件,其中包含所有图像,但具有不同的x/y偏移量,在html中,你可以用带有偏移量的backround来显示正确的图像)。

我看了侧边栏,看到了这个主题,但当我看到评论时,你在问打补丁的问题。

最好的方法是确保用户知道该怎么处理它。你希望用户下载X文件并将Y输出用于不同的目的。另一方面,似乎常见的做法是,为那些不是安卓应用程序原生的、无法放入APK的用户提供大量资源。

一个类似的例子是JDIC应用程序,它使用流行的日语资源,同时用于英语翻译。像WWWJDIC这样的JDIC应用程序使用在线下载的超大参考文件,否则这些文件在谷歌服务器上会有糟糕的延迟(前面已经提到过)。谷歌应用程序上超过200 MB也是不好的代表,除非它是3D的,这是合理的。如果你的图像在应用程序本身没有很长的加载时间的情况下无法压缩,你可能需要考虑这个选项。唯一的缺点是请求在线连接(前面也提到过)。

此外,你可以使用7zip并对Android进行编程,将其自动提取到一个位置。http://www.wikihow.com/Use-7Zip-to-Create-Self-Extracting-excutables

另一方面,用户在初次启动时进行一次性下载的同时,对应用程序进行例行检查将是最佳选择。然后,你可以选择放入一个AsyncTask,这样你的文件就会下载到应用程序中,并在重新启动后使用,或者按照你想要的方式使用,所以你真的只需要一个AsyncTask。这样做的好处是用户可以在应用程序上同步,并且可能只需要检查一次。不利的一面是,用户可能并不总是能够更新,可能需要使用4G或LTE,但如果他可以随时使用WiFi,这是一个小问题。