退房BitmapFactory内存不足的错误退房、错误、内存不足、BitmapFactory

2023-09-06 08:04:23 作者:万物失色

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

  

java.lang.OutOfMemoryError结果  在android.graphics.BitmapFactory.nativeDe $ C $检测板

我只用位图厂做一个研究背景,以我的行动吧。

在code:

  BitmapDrawable背景=新BitmapDrawable(BitmapFactory.de codeResource(getResources(),R.drawable.actionbar));         background.setTileModeX(android.graphics.Shader.TileMode.REPEAT);         actionbar.setBackgroundDrawable(背景); 

这个错误不会在活动开始happend,它改变activites了很多之后会发生。

有人能告诉我如何解决这个问题。

编辑编辑修改

下面是开发者控制台的错误消息:

  java.lang.IllegalStateException:无法执行活动的方法在android.view.View $ 1.onClick(View.java:3838)在android.view.View.performClick(View.java:4475)在android.view.View $ PerformClick.run(View.java:18786)在android.os.Handler.handleCallback(Handler.java:730)在android.os.Handler.dispatchMessage(Handler.java:92)在android.os.Looper.loop(Looper.java:137)在android.app.ActivityThread.main(ActivityThread.java:5419)在java.lang.reflect.Method.invokeNative(本机方法)在java.lang.reflect.Method.invoke(Method.java:525)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1187)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)在dalvik.system.NativeStart.main(本机方法)java.lang.reflect.InvocationTargetException:产生的原因在java.lang.reflect.Method.invokeNative(本机方法)在java.lang.reflect.Method.invoke(Method.java:525)在android.view.View $ 1.onClick(View.java:3833)... 11更多java.lang.OutOfMemoryError:产生的原因在android.graphics.BitmapFactory.nativeDe $ C $检测板(本机方法)在android.graphics.BitmapFactory.de codeStream(BitmapFactory.java:596)在android.graphics.BitmapFactory.de codeResourceStream(BitmapFactory.java:444)在android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832)在android.content.res.Resources.loadDrawable(Resources.java:2988)在android.content.res.Resources.getDrawable(Resources.java:1558)在android.widget.ImageView.resolveUri(ImageView.java:646)在android.widget.ImageView.setImageResource(ImageView.java:375)在com.packagename.pp.Activitytwo.disableAnswer(Activitytwo.java:435)在com.packagename.pp.Activitytwo.submitAnswer(Activitytwo.java:230)... 14个 
安卓BitmapFactory.decodeStream报java.lang.OutOfMemoryError内存溢出

解决方案

您对您的code内存泄漏。考虑使用了WeakReference 的,的 WeakHashMap中或的 SoftReference的以避免强烈的引用。免费使用的资源和活动onLowMemory方法变量。

您也可以使用该选项 BitmapFactory.Options 以德code中的位图显示的例子这里。

我张贴的一些线索来解决这个问题here.

Today I got my app crashed, Out of memory error.

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

I only used Bitmap Factory to make a backgroud to my action bar

The code:

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

This error doesn't happend on activity start, it happens after changing in activites a lot.

Can someone show me how to fix this

EDIT EDIT EDIT

Here is the error message in developer console:

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

解决方案

You have a memory leak on your code. Consider the use of WeakReference, WeakHashMap or SoftReference to avoid strong references. Free unused resources and variables on onLowMemory method of activities.

Also you can use the option BitmapFactory.Options to decode the bitmap as show the examples here.

I posted the some hints to solve this problem here.