【问题标题】:Mysterious stacktrace in Android developer console (bitmap size exceeds 32bits)Android 开发者控制台中的神秘堆栈跟踪(位图大小超过 32 位)
【发布时间】:2012-02-20 23:47:05
【问题描述】:

我在开发者控制台中获得了以下堆栈跟踪。一些报告说“应用程序无法启动”或“启动时崩溃”。

我不知道该怎么做,它没有在我的应用程序类中提及任何内容!有人遇到同样的错误并找到了解决方法吗?

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)

【问题讨论】:

  • 您的主要活动可能会在您的范围“外部”加载与其布局相关的资源。无论如何,似乎有一些图像导致问题,如果没有太多,请尝试用例如替换它们。默认的 android 图标,直到找到导致问题的图标。
  • 我在开发小部件时有时会遇到同样的问题。它通常通过(它在 Eclipse 中)清理项目(菜单 Project->Clean)然后刷新项目并再次构建它来治愈。但是,如果有人知道它发生的确切原因,那就太棒了,我肯定会投票给答案! ;)

标签: android bitmap stack-trace


【解决方案1】:

如果是数量问题,你必须recycle你的位图。
如果是大小问题(不能加载太大的图像),则必须加载较轻的位图副本。

这是创建较小图像的代码

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

inSampleSize 设置为 > 1,请求解码器对原始图像进行二次采样,返回较小的图像以节省内存。
使用 2 的幂可以提高效率。

This post 可能有用

【讨论】:

  • 这个不行,和大小无关,看我的问题:here
  • 这如何解决问题?问题中没有提到ImageView,也没有任何创建位图的迹象! View.buildDrawingCache 由于某种原因正在创建一个太大的图像......
【解决方案2】:

Bitmap.createBitmap()

抛出 IllegalArgumentException

如果 x、y、宽度、高度值超出源位图的尺寸,或者宽度

首先确保您的 x、y、宽度和高度值小于源位图。

对我来说,问题是矩阵。我的矩阵有一个平移值,它使其中一个值超出了输入位图的范围。

希望对你有帮助

【讨论】:

    【解决方案3】:

    在我的情况下,这个字符串是错误的:

    WebView.getSettings().setUseWideViewPort(true);
    

    崩溃仅在 API 18 及更低版本上发生

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      相关资源
      最近更新 更多