在Android开发者控制台神秘的堆栈跟踪(位图的大小超过32位) [英] Mysterious stacktrace in Android developer console (bitmap size exceeds 32bits)

查看:243
本文介绍了在Android开发者控制台神秘的堆栈跟踪(位图的大小超过32位)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到了开发者控制台下面的堆栈跟踪。有些报告说,该应用程序将无法启动或崩溃在启动。

我不知道该怎么办,它没有提到任何关于我的应用程序的类!任何人都得到了同样的错误,并找到了解决?

  java.lang.IllegalArgumentException:如果位图的大小超过32位
在android.graphics.Bitmap.nativeCreate(本机方法)
在android.graphics.Bitmap.createBitmap(Bitmap.java:695)
在android.view.View.buildDrawingCache(View.java:6646)
在android.view.ViewGroup.onAnimationStart(ViewGroup.java:1345)
在android.view.ViewGroup.drawChild(ViewGroup.java:1591)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
在android.view.View.draw(View.java:6996)
在android.widget.FrameLayout.draw(FrameLayout.java:357)
在android.view.ViewGroup.drawChild(ViewGroup.java:1732)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
在android.view.ViewGroup.drawChild(ViewGroup.java:1730)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
在android.view.ViewGroup.drawChild(ViewGroup.java:1730)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
在android.view.View.draw(View.java:6996)
在android.widget.FrameLayout.draw(FrameLayout.java:357)
在com.android.internal.policy.impl.PhoneWindow $ DecorView.draw(PhoneWindow.java:2054)
在android.view.ViewRoot.draw(ViewRoot.java:1632)
在android.view.ViewRoot.performTraversals(ViewRoot.java:1335)
在android.view.ViewRoot.handleMessage(ViewRoot.java:1991)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:150)
在android.app.ActivityThread.main(ActivityThread.java:4358)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:507)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:849)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
在dalvik.system.NativeStart.main(本机方法)
 

解决方案

如果它是数量的SA的事,你要的回收你的位图。
如果它的大小的问题(你可以不加载过大的图像),您必须加载您的位图的复印件更亮。

下面是code创建一个更小的图像

 选项thumbOpts =新的选项();
thumbOpts.inSampleSize = 4;
BMP位= BitmapFactory.de codeFILE(的ImagePath,mThumbOpts);
 

<一个href="http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize"相对=nofollow> inSampleSize 的设置为值> 1,请日codeR子采样原始图像,返回一个更小的图像,以节省存储器。
使用2的幂为它是更有效的。

<一个href="http://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object">This帖子可能是有用的。

I'm getting the following stacktrace in the developer console. Some report say "the application won't start" or "crash at startup".

I don't know what to do, it doesn't mention any on my app's class! Anyone got the same error and found a fix?

java.lang.IllegalArgumentException: bitmap size exceeds 32bits
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:695)
at android.view.View.buildDrawingCache(View.java:6646)
at android.view.ViewGroup.onAnimationStart(ViewGroup.java:1345)
at android.view.ViewGroup.drawChild(ViewGroup.java:1591)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
at android.view.View.draw(View.java:6996)
at android.widget.FrameLayout.draw(FrameLayout.java:357)
at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
at android.view.View.draw(View.java:6996)
at android.widget.FrameLayout.draw(FrameLayout.java:357)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2054)
at android.view.ViewRoot.draw(ViewRoot.java:1632)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1335)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1991)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4358)
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:849)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
at dalvik.system.NativeStart.main(Native Method)

解决方案

if it 's a matter of quantity, you have to recycle your bitmaps.
if it's a matter of size (you can't load too big images), you have to load a lighter copy of your bitmap.

Here is the code to create a smaller image

Options thumbOpts = new Options();
thumbOpts.inSampleSize = 4;
Bitmap bmp = BitmapFactory.decodeFile(imagePath, mThumbOpts);

inSampleSize set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory.
Use a power of 2 for it to be more efficient.

This post may be useful

这篇关于在Android开发者控制台神秘的堆栈跟踪(位图的大小超过32位)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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