Android ANRs错误

时间:2013-12-06 17:36:07

标签: java android

我是Android领域的新手。我写了一个原始应用程序。

我有一个包含图像和文字的ListView。

现在我收到了错误消息。

    java.lang.OutOfMemoryError: bitmap size exceeds VM budget
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
at android.content.res.Resources.loadDrawable(Resources.java:1709)
at android.content.res.Resources.getDrawable(Resources.java:581)
at android.widget.ImageView.resolveUri(ImageView.java:501)
at android.widget.ImageView.setImageResource(ImageView.java:280)
at com.PACKAGE.MainActivity$MyListAdapter.getView(MainActivity.java:132)
at android.widget.AbsListView.obtainView(AbsListView.java:1432)
at android.widget.ListView.makeAndAddView(ListView.java:1745)
at android.widget.ListView.fillDown(ListView.java:670)
at android.widget.ListView.fillFromTop(ListView.java:727)
at android.widget.ListView.layoutChildren(ListView.java:1598)
at android.widget.AbsListView.onLayout(AbsListView.java:1262)
at android.view.View.layout(View.java:7175)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912)
at android.view.View.layout(View.java:7175)
at android.widget.FrameLayout.onLayout(FrameLayout.java:343)
at android.view.View.layout(View.java:7175)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
at android.view.View.layout(View.java:7175)
at android.widget.FrameLayout.onLayout(FrameLayout.java:343)
at android.view.View.layout(View.java:7175)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1140)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3714)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:853)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
at dalvik.system.NativeStart.main(Native Method)

究竟是什么意思?在哪一行是错误?

我如何才能最好地阅读和理解信息?

1 个答案:

答案 0 :(得分:0)

首先看一下例外情况 java.lang.OutOfMemoryError:位图大小超过VM预算
而且很可能这是你代码中的一行 at com.PACKAGE.MainActivity $ MyListAdapter.getView(MainActivity.java:132)(注意你的包裹)

您尝试加载的图像大于支持的堆。压缩文件的大小(以MB为单位)并不重要,因为任何图像都将作为位图在内存中扩展。因此,只有像素格式和像素数才重要。在你的情况下,2200x2048可能会让我非常喜欢。

作为记忆问题的可能解决方案

  • 使用较低分辨率的图像,或使用BitmapFactory手动加载图像,您可以选择下采样
  • 在清单中使用 android:largeHeap =“true”可能会有所帮助。如果可以避免的话,不是很好的做法。

ANR的出现是因为您在UI线程上做了大量工作(加载大图像)。较低分辨率的图像也可能有助于解决此问题,但您应该考虑在工作线程中加载图像 http://developer.android.com/guide/components/processes-and-threads.html工作线程