活动中的多个图像导致错误
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 错误