活动中的多个图像导致错误

Posted

技术标签:

【中文标题】活动中的多个图像导致错误【英文标题】:Multiple images in activity causing error 【发布时间】:2015-02-28 20:14:33 【问题描述】:

我正在为我的公司开发一个显示分步流程的应用。每个步骤由一个图像组成,每个活动显示八到十二个图像。我现在遇到了 java.lang.outofmemory。它还列出了一个 android.view.InflateException:Binary xml 错误。我已将图像的大小调整为 360dpi,并且在再次出现错误之前只允许再拍几张照片。我还尝试增加堆大小,但这并没有改变结果。还有另一种方法我应该这样做吗?非常感谢。

【问题讨论】:

先过一遍,对你有帮助-developer.android.com/training/displaying-bitmaps/… 【参考方案1】:

您可以缩小图像,从而减少它们的内存占用。此外,您可以查看 picasso 和 UIL 等某些库,看看它们是否可以帮助您。

【讨论】:

【参考方案2】:

这里没有魔法,我猜 imageview 是在全 argb 模式下渲染的,所以 8 位 * 4 * 像素数。太多了!

您的活动如何显示图像?

如果它们在列表中,请确保使用回收。 http://developer.android.com/training/improving-layouts/smooth-scrolling.html 您对 ViewHolder 感兴趣

如果您使用 ViewPager 并且向左/向右滑动,请确保在滑动时破坏片段,以便内存中只有 3 张图像(显示 1 张,旁边有 2 张)。

如果不是这些,也许你将不得不重构你的布局:(

最后但并非最不重要的一点是,确保将位图的大小调整为您的确切屏幕尺寸,如前所述,Picasso 提供了一种方便的方法来使用 .fit() 进行此操作。它将等待 imageview 被测量,然后调整下载的位图大小并使其适合 imageview。您甚至不必担心主线程上的网络,多么美妙!

Picasso.with(getActivity()) 
        .load(imageUrl) 
        .fit()
        .into(imageView);

【讨论】:

我已将它们添加到滚动视图中进行显示 好的,所以你的滚动视图(我猜它下面的线性)并不关心内存问题。您应该重新考虑您的布局,使其具有良好的前瞻性。【参考方案3】:

这就是编码方法的重要性所在。您如何实现它可能有助于我们查明内存泄漏。

但一般做法(可能不是好的做法) 在一个常量类中加载所有位图。 ( 就一次) 无限参考。

【讨论】:

以上是关于活动中的多个图像导致错误的主要内容,如果未能解决你的问题,请参考以下文章

c++ OpenCV CVCalibrateCamera2 导致多个错误

裁剪图像会导致越界错误[关闭]

IAuthenticationFilter 中的 C# Ninject Web API 异步查询导致实体框架中的多个操作错误

setOnClickListener 在 onBindViewHolder 中为下一个活动拾取错误图像

一个 Viewcontroller 中的多个 collectionview 导致 Index out of range 错误

图像裁剪器 theartofdev 库的 xml 文件中的错误