【问题标题】:Out of memory error in BitmapFactoryBitmapFactory 内存不足错误
【发布时间】:2014-10-21 09:29:18
【问题描述】:

今天我的应用程序崩溃了,内存不足错误。

java.lang.OutOfMemoryError
在 android.graphics.BitmapFactory.nativeDecodeAsset

我只使用 Bitmap Factory 为我的操作栏制作背景

代码:

BitmapDrawable background = new BitmapDrawable (BitmapFactory.decodeResource(getResources(), R.drawable.actionbar)); 
         background.setTileModeX(android.graphics.Shader.TileMode.REPEAT); 
         actionbar.setBackgroundDrawable(background);

这个错误不是在activity开始时发生的,它是在activity中改变很多之后发生的。

谁能告诉我如何解决这个问题

编辑编辑编辑

这是开发者控制台中的错误消息:

java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:3838)
at android.view.View.performClick(View.java:4475)
at android.view.View$PerformClick.run(View.java:18786)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at android.view.View$1.onClick(View.java:3833)
... 11 more
Caused by: java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832)
at android.content.res.Resources.loadDrawable(Resources.java:2988)
at android.content.res.Resources.getDrawable(Resources.java:1558)
at android.widget.ImageView.resolveUri(ImageView.java:646)
at android.widget.ImageView.setImageResource(ImageView.java:375)
at com.packagename.pp.Activitytwo.disableAnswer(Activitytwo.java:435)
at com.packagename.pp.Activitytwo.submitAnswer(Activitytwo.java:230)
... 14 more

【问题讨论】:

  • 我在 [此处][1] 发布了此问题的解决方案。 [1]:stackoverflow.com/questions/25344518/…
  • 这可能表明您的代码中某处存在内存泄漏,即。您没有释放先前分配的位图,并且某些东西仍然保留对它的引用。
  • @Joseph 我不明白你的意思
  • @Jitsu 是的,但我不知道如何解决它

标签: android bitmap bitmapfactory


【解决方案1】:

您的代码存在内存泄漏。考虑使用WeakReferenceWeakHashMapSoftReference 以避免强引用。在活动的 onLowMemory 方法上释放未使用的资源和变量。

您也可以使用选项BitmapFactory.Options 来解码位图,如示例here 所示。

我发布了一些提示来解决这个问题here

【讨论】:

    【解决方案2】:

    首先尝试注释此代码,看看是否仅此一个问题。可能是其他东西占用了内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 2020-10-15
      • 2016-10-20
      相关资源
      最近更新 更多