将图像加载到 xml 中的 ImageView 会占用更多内存?
我有一个包含大约 7 个图像视图的活动(就像任何 android 手机中的应用程序托盘一样。)
我正在为 xml 中的每个图像视图加载图像。这会导致 OutOfMemoryError 吗?
有没有办法回收这些?
将图像加载到 xml 中的 ImageView 会占用更多内存?
我有一个包含大约 7 个图像视图的活动(就像任何 android 手机中的应用程序托盘一样。)
我正在为 xml 中的每个图像视图加载图像。这会导致 OutOfMemoryError 吗?
有没有办法回收这些?
是的,可以附加drawable
图像,ImageView
并且可以在需要时将其删除。
imageview.setBackgroundResource(R.drawable.image);
or
imageview.setImageDrawable(drawable);
它不会导致任何内存不足问题。链接到文档
我在加载图像时遇到了这个问题。有时此错误只能在 Android 模拟器中看到,有时这也会使移动设备中的应用程序崩溃。
我通过以下两个步骤解决了这个问题:
如果分辨率太高,请重新调整图像大小。
没有同时打开太多图像对象。
您也可以通过在不再需要时将图像对象分配为 NULL 来帮助垃圾收集器。
除非有必要,否则我会防止同时打开太多图像。
您必须重新调整大小的因素将取决于图像的实际大小。
解决 Android 内存问题的几个小技巧:
1)。切勿使用局部变量专门在循环中存储大数据/位图,因为它会创建不必要的对象。在这种情况下,我更喜欢类/实例变量。除非需要,否则尽量不要持久化数据。
2)。尽可能避免调用 View.findViewById(..)。Romain Guy 在Google I/O 2010中明确指出此方法成本高(运行需要一些 KB 的内存),因此请巧妙地调用此方法,就像使用 ViewHolder 一样会消耗更少的内存。
3) 有效使用字符串池,在对字符串进行繁重操作时使用 StringBuilder/StringBuffer。确保您知道何时必须使用 StringBuffer,因为它是同步的,并且与 StringBuilder 相比再次昂贵。