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

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

【问题讨论】:

标签: java android eclipse android-activity


【解决方案1】:

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

【讨论】:

    【解决方案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】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多