xml图像占用了太多内存 - android

时间:2015-08-24 11:41:58

标签: android image image-processing memory-management android-xml

嗨,我是Android新手,我在使用xml定位和设计我的活动布局时遇到了一些内存管理问题。 大多数图像大约100kb,但大小不一,例如图像1将是512x512,图像2将是120x320等。 目前,图像正在减慢我的应用程序的性能,有时会崩溃。 有没有办法减少图像占用应用程序的内存量?

2 个答案:

答案 0 :(得分:3)

为了正确处理位图,应用程序必须执行许多步骤。

  • 小压缩尺寸。平衡磁盘(或线上)格式的质量与文件大小非常重要。能够通过有损预处理器运行PNG文件,或选择在需要时使用WEBP / JPG对于应用程序中的每个图像都至关重要。 Smaller PNG Files更多地涵盖了这一点。但是,这里的问题是,这对内存大小没有帮助。请记住,当您从磁盘加载图像时,它们会在内存中解压缩为每像素32位(换句话说,不会压缩)。

  • 压缩内存格式。 Android提供备用565格式,每个像素仅使用16位,而不是8888格式的32位。如果您使用的图片不需要alpha,则应考虑Smaller Pixel Formats中讨论的过程,以利用将位图加载为565。

  • 重新使用位图空间。大多数使用缩略图的应用程序,一次只能在屏幕上看到10-20个(即使可能有数千个加载)。这里的诀窍在Re-using bitmaps中描述。基本上,一旦不再需要缩略图,您可以将其空间重新用于传入的缩略图,而不是分配一个全新的缩略图。

  • 显示分辨率。加载2MB图像,仅将其显示为缩略图是没有意义的。相反,您应该将图像缩放到设备上显示的图像的分辨率。我将讨论在other SO post中加载这些图像的最有效方法。

一般而言,像PicassoGlide这样的图书馆在提供使这一切变得更容易的API方面做得很好;但是他们仍然会经历这些相同的过程。

答案 1 :(得分:0)

您可以使用3种解决方案:

第一个解决方案:

在应用程序标记中添加AppManifest.xml:

android:largeHeap="true"

这会尝试阻止您的应用导致OutOfMemoryError,但请谨慎使用。

  

文档:是否应使用大型Dalvik堆创建应用程序的进程。这适用于为应用程序创建的所有进程。它仅适用于加载到进程中的第一个应用程序;如果您使用共享用户ID以允许多个应用程序使用进程,则它们都必须一致地使用此选项,否则它们将具有不可预测的结果。   大多数应用程序不应该需要这个,而应该专注于减少其整体内存使用量以提高性能。启用此功能也不能保证可用内存的固定增加,因为某些设备受其总可用内存的限制。

第二个解决方案:

如果您的图片文件很大,可以使用以下在线工具将其最小化:http://compresspng.com/

第三个解决方案:

您可以使用BitmapFactory加载图片。以下是Android开发者文档:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html