5

我正在尝试将位图加载到 android imageView 中。

在此处输入图像描述

但得到这个java.lang.OutOfMemoryError

我怎样才能避免这种情况?

10-06 00:11:21.225: E/AndroidRuntime(6825): FATAL EXCEPTION: main
10-06 00:11:21.225: E/AndroidRuntime(6825): java.lang.OutOfMemoryError
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:650)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:722)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.provider.MediaStore$Images$Media.getBitmap(MediaStore.java:790)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at de.vogella.android.todos.MySimpleArrayAdapter.getView(MySimpleArrayAdapter.java:85)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.widget.AbsListView.obtainView(AbsListView.java:2452)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1250)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.widget.ListView.onMeasure(ListView.java:1162)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.view.View.measure(View.java:15481)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5107)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1396)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
10-06 00:11:21.225: E/AndroidRuntime(6825):     at android.view.View.measure(View.java:15481)
4

1 回答 1

8

这取决于您的位图有多大,当您在计算机上读取大小时,Android 似乎分配的空间比图像的大小多一点。所以...

  • 您可以只使用较小的图像。
  • Google 实际上已经在此处发布了关于避免 OutOfMemoryErrors 的指南,这将有很大帮助,尽管我也必须使用较小的图像尺寸。
  • 几乎肯定会起作用的一种方法是在清单中的应用程序标记之间设置android:largeHeap="true" 。这会增加您的堆大小,但可能会使您的应用程序稍微滞后。

也许对你来说,这些想法的结合会奏效。

于 2013-10-05T21:27:44.763 回答