3

I am loading lots of bitmaps in every activity. I was getting lots of “java.lang.OutOfMemoryError" after switching between activities. My app is mostly on potrait orientation.

I tried many solutions and found a relatively better approach in one of the solutions on this website.

First, set the “id” attribute on the parent view of your XML layout:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:id="@+id/RootView"
 >

Then, in the onDestroy() method of your Activity, call the unbindDrawables() method passing a refence to the parent View and then do a System.gc()

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

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

    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();
        }
    }

But it does not completely remove java.lang.OutOfMemoryError. Now I randomly get this memory exception. I have read a few posts stating that for completely getting rid of this issue you have to load bitmaps from code and release them in activity onDestroy which in my case is not a practical solution because I am loading lots of bitmaps.

Does someone have any better solution to this problem?

Dharman
  • 30,962
  • 25
  • 85
  • 135
Rishi
  • 3,499
  • 8
  • 35
  • 54

0 Answers0