【问题标题】:Universal Image Loader Android : Changing Layout properties causes OutOfMemoryError通用图像加载器 Android:更改布局属性会导致 OutOfMemoryError
【发布时间】:2012-11-17 02:07:44
【问题描述】:

我有多项活动。每个活动都在 GridView 中显示图像。作为独立应用程序的每个活动都可以正常工作。当我从另一个活动中调用活动时,就会出现问题。 一个 GridView(第二个/第三个活动) 是一个 imageView :

 <ImageView
        android:id="@+id/grid_sub_item_image"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:contentDescription="@string/descr_image"
        android:scaleType="centerCrop" >
    </ImageView>

当我在 dp/px 中设置宽度、高度时效果很好。像:

android:layout_width="100dp"
            android:layout_height="100dp"

对我来说很好。

但是当我设置高度/宽度时:wrap_content/fill_parent,它会出现内存不足异常:

null
java.lang.OutOfMemoryError
android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
com.nostra13.universalimageloader.core.ImageDecoder.decode(ImageDecoder.java:83)
com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeWithOOMHandling(LoadAndDisplayImageTask.java:187)
com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeImage(LoadAndDisplayImageTask.java:170)
com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:126)
com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:72)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
java.util.concurrent.FutureTask.run(FutureTask.java:137)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
java.lang.Thread.run(Thread.java:856)

我在每个活动中都实例化了 ImageLoader。但这无济于事。

【问题讨论】:

标签: android android-layout universal-image-loader


【解决方案1】:

Useful Info section 描述了 UIL 如何缩小原始图像以及使用哪些参数。

所以我建议你为 ImageView 设置android:maxWidthandroid:maxHeight 参数以节省内存。

【讨论】:

  • 我通过计算设备分辨率在运行时设置了 ImageView 的高度和宽度。它有效:)
猜你喜欢
  • 1970-01-01
  • 2011-01-12
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
相关资源
最近更新 更多