嗨,我是Android新手,我在使用xml定位和设计我的活动布局时遇到了一些内存管理问题。 大多数图像大约100kb,但大小不一,例如图像1将是512x512,图像2将是120x320等。 目前,图像正在减慢我的应用程序的性能,有时会崩溃。 有没有办法减少图像占用应用程序的内存量?
答案 0 :(得分:3)
为了正确处理位图,应用程序必须执行许多步骤。
小压缩尺寸。平衡磁盘(或线上)格式的质量与文件大小非常重要。能够通过有损预处理器运行PNG文件,或选择在需要时使用WEBP / JPG对于应用程序中的每个图像都至关重要。 Smaller PNG Files更多地涵盖了这一点。但是,这里的问题是,这对内存大小没有帮助。请记住,当您从磁盘加载图像时,它们会在内存中解压缩为每像素32位(换句话说,不会压缩)。
压缩内存格式。 Android提供备用565格式,每个像素仅使用16位,而不是8888格式的32位。如果您使用的图片不需要alpha,则应考虑Smaller Pixel Formats中讨论的过程,以利用将位图加载为565。
重新使用位图空间。大多数使用缩略图的应用程序,一次只能在屏幕上看到10-20个(即使可能有数千个加载)。这里的诀窍在Re-using bitmaps中描述。基本上,一旦不再需要缩略图,您可以将其空间重新用于传入的缩略图,而不是分配一个全新的缩略图。
一般而言,像Picasso和Glide这样的图书馆在提供使这一切变得更容易的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