java.lang.OutOfMemoryError当尝试将位图加载到imageView中时 [英] java.lang.OutOfMemoryError when trying to load a bitmap into imageView
本文介绍了java.lang.OutOfMemoryError当尝试将位图加载到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):在android.graphics.BitmapFactory.nativeDecodeStream(本地方法)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.graphics.BitmapFactory.decodeStream(BitmapFactory。 java:650)
10-06 00:11:21.225:E / AndroidRuntime(6825):android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:722)
10-06 00:11: 21.225:E / AndroidRuntime(6825):在android.provider.MediaStore $ Images $ Media.getBitmap(MediaStore.java:790)
10-06 00:11:21.225:E / AndroidRuntime(6825):at de .vo gella.android.todos.MySimpleArrayAdapter.getView(MySimpleArrayAdapter.java:85)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.widget.AbsListView.obtainView(AbsListView.java:2452 )
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.widget.ListView.measureHeightOfChildren(ListView.java:1250)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.widget.ListView.onMeasure(ListView.java:1162)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.view.View.measure View.java:15481)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5107)
10-06 00: 11:21.225:E / AndroidRuntime(6825):android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1396)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.widget .LinearLayout.measureVertical(LinearLayout.java:681)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.widget.LinearLayout.onMeasu re(LinearLayout.java:574)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.view.View.measure(View.java:15481)
解决方案
这取决于你的位图有多大,Android似乎分配一点空间当您读取计算机上的大小时,图像的大小。所以...
- 你可以使用较小的图像。
- Google已经发布了一个避免OutOfMemoryErrors的指南这里,这将帮助很多,虽然我不得不使用较小的图像大小。
- 几乎可以肯定的一种方法是设置 android:largeHeap =true。这将增加您的堆大小,但可能会使您的应用程序滞后。
也许对于您来说,这些想法的组合将会起作用。
I'm trying to load a bitmap into an android imageView.
but get this java.lang.OutOfMemoryError
how can I avoid this ?
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)
解决方案
It depends how big your bitmap is, Android seems to allocate a little more space than the size of the image when you read the size on your computer. So...
- You could just use a smaller image.
- Google have actually published a guide on avoiding OutOfMemoryErrors here which will help a lot, though I had to use a smaller image size as well.
- One method that will almost definitely work is to set android:largeHeap="true" in your manifest, between your application tags. This will increase your heap size, but may make your app lag a little.
Maybe for you, a combination of these ideas will work.
这篇关于java.lang.OutOfMemoryError当尝试将位图加载到imageView中时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文