Android : References to a Context and memory leaks

17,502

Solution 1

This is fine, and will not cause a memory leak.

As soon as onCreate finishes executing, h will be out of scope and become eligible for garbage collection. If h was static, then you would run into problems. Only when the reference to the context outlives the lifecycle of the context itself will a memory leak occur. A few helpful hints:

  • Use Context.getApplicationContext() when possible. This context will live as long as your application is alive.
  • Be careful when using static fields and inner classes.
  • Run your application through a profiler to check for leaks.

Solution 2

The scope of the HelperClass is only within your onCreate function, so once onCreate executed, your "h" object is no longer needed and subject to garbage collection.

It would be a different story if "h" was a static member - THAT would be a great way to leak memory.

Share:
17,502
Guido
Author by

Guido

NaN

Updated on June 06, 2022

Comments

  • Guido
    Guido about 2 years

    I've read that it is a mistake and a source of memory leaks in Android application to keep a long-lived references to a Context.

    But I don't understand if it is ok to create a class that looks like this one:

    public class HelperClass {
        private Context context;
    
        public HelperClass(Context context) {
            this.context = context;
        }
        public void myHelperMethod() {
            // uses this.context
        }
    }
    

    And call it from an Activity:

    public class MyActivity extends Activity {
        public void onCreate(Bundle savedInstanceState) {
            HelperClass h = new HelperClass(this);
            h.myHelperMethod();
        }
    
        ...
    }