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();
}
...
}
This is fine, and will not cause a memory leak.
As soon as
onCreatefinishes executing,hwill be out of scope and become eligible for garbage collection. Ifhwas 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:Context.getApplicationContext()when possible. This context will live as long as your application is alive.