2012-09-30 12 views
5

Error:Jak rozwiązać OutOfMemoryError użyciu LayerDrawable

java.lang.OutOfMemoryError 
at android.graphics.Bitmap.nativeCreate(Native Method) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:605) 
at android.graphics.Bitmap.createBitmap(Bitmap.java:551) 
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437) 
at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:618) 
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:593) 
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445) 
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:775) 
at android.content.res.Resources.loadDrawable(Resources.java:1968) 
at android.content.res.Resources.getDrawable(Resources.java:677) 
at android.widget.ImageView.resolveUri(ImageView.java:542) 
at android.widget.ImageView.setImageResource(ImageView.java:315) 
at app.Main.GridActivity.initaliseLevel(GridActivity.java:245) 
at app.Main.GridActivity.load_player_settings(GridActivity.java:180) 
at app.Main.GridActivity.onResume(GridActivity.java:79) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1158) 
at android.app.Activity.performResume(Activity.java:4607) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2448) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2486) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2000) 
at android.app.ActivityThread.access$600(ActivityThread.java:128) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4517) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
at dalvik.system.NativeStart.main(Native Method) 

ilustracje są ustalane przez:

ImageButton b0 = (ImageButton) findViewById(R.id.ImageButton00); 
Resources r = getResources(); 
Drawable[] layers = new Drawable[2]; 
layers[0] = r.getDrawable(R.drawable.image); 
layers[1] = r.getDrawable(R.drawable.imagetwo); 
LayerDrawable layerDrawable = new LayerDrawable(layers); 
b0.setImageDrawable(layerDrawable); 

Od przeczytaniu innych odpowiedzi, zebrałem, że obrazy muszą być poddane recyklingowi po użyciu. Czy to najlepsza opcja? Jeśli tak, to jak można przekonwertować warstwę LayerDrawable na mapę bitową, aby można ją było poddać recyklingowi?

+0

co ma wymiary (szerokość x wysokość) obrazu, który próbujesz załadować? – dumbfingers

+0

Istnieje około 25 layerDrawables wszystkie 175x175px i składający się z 2-3 warstw – Isaac

+0

Dostaję coś podobnego. Dość małe obrazy. Jeśli skomentuję wszystkie oprócz jednego obrazu, nie ma problemu, ale wszystko inne powoduje awarię. Na pierwszym obrazie są ustawienia krycia ... nie jesteś pewien, czy to powoduje? – RiddlerDev

Odpowiedz

2

W sekcji manifestu> Atrybuty aplikacji znajduje się ustawienie "Duży stos", wybierz aktywność w węzłach aplikacji, a następnie wybierz "Prawda" w Ustawieniach sterty, które pomogły mi, dopóki nie rozwiązałem problemu.

i również mam to w mojej działalności:

private void unbindDrawables(View view) { 
    if (view.getBackground() != null) { 
     view.getBackground().setCallback(null); 
    } 
    if (view instanceof ViewGroup) { 
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 
      unbindDrawables(((ViewGroup) view).getChildAt(i)); 
     } 
     ((ViewGroup) view).removeAllViews(); 
    } 
} 

    @Override 
protected void onDestroy() { 
    super.onDestroy(); 

    unbindDrawables(findViewById(R.id.nameslayout)); 
    System.gc(); 
} 

hopu, który pomaga

+0

Jesteś sir rock! To pozwoliło mi przynajmniej załadować ekran na telefon, aby móc kontynuować optymalizację. Chcemy się upewnić, że dodam również Twoje materiały z GC, ponieważ wygląda to dobrze. Dziękuję Ci! – RiddlerDev

+0

Im Glad byłem w stanie pomóc !!! –

Powiązane problemy