java.lang.OutOfMemoryError当试图加载一个位图到的ImageView [英] java.lang.OutOfMemoryError when trying to load a bitmap into imageView

查看:277
本文介绍了java.lang.OutOfMemoryError当试图加载一个位图到的ImageView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想一个位图加载到一个Android ImageView的。

但得到这个 java.lang.OutOfMemoryError

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

  10-06 00:11:21.225:E / AndroidRuntime(6825):致命异常:主要
10-06 00:11:21.225:E / AndroidRuntime(6825):java.lang.OutOfMemoryError
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.graphics.BitmapFactory.nativeDe codeStream(本机方法)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.graphics.BitmapFactory.de codeStream(BitmapFactory.java:650)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.graphics.BitmapFactory.de codeStream(BitmapFactory.java:722)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.provider.MediaStore $ $图片Media.getBitmap(MediaStore.java:790)
10-06 00:11:21.225:E / AndroidRuntime(6825):在de.vogella.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.onMeasure(LinearLayout.java:574)
10-06 00:11:21.225:E / AndroidRuntime(6825):在android.view.View.measure(View.java:15481)


解决方案

这取决于您的位图有多大,看来Android当你阅读电脑上的大小来分配比图像的大小多一点空间。所以......


  • 您可以只使用一个较小的图像。

  • 谷歌实际上已经出版了一本指南,避免OutOfMemoryError异常这里这将有很大的帮助虽然我不得不使用较小的图像尺寸为好。

  • 将几乎可以肯定工作的一种方法是设置<一个href=\"http://developer.android.com/reference/android/R.styleable.html#AndroidManifestApplication_largeHeap\">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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆