I have a static reference to an object that has a Context field
into an activity.
This is activity is pretty much a container for a WebView and it’s reachable with the use of intent-filter
. In other words, links can be opened directly inside my app.
Using instance variables would be pretty much pointless since the Activity gets destroyed when no longer has focus so I am using static instances for a boolean that is works as an option chooser and an object (with a Context field) that needs to perform work
static boolean autoTrain = false;
static AutoTrain autoTrain = new AutoTrain(getApplicationContext(),string);
But Android Studio is warning me:
Do not place Android context classes in static fields (static
reference to AutoWalk2 which has field context pointing to Context);
this is a memory leak Non-static inner classes have an implicit
reference to their outer class. If that outer class is for example a
Fragment or Activity, then this reference means that the long-running
handler/loader/task will hold a reference to the activity which
prevents it from getting garbage collected. Similarly, direct field
references to activities and fragments from these longer running
instances can cause leaks. ViewModel classes should never point to
Views or non-application Contexts.
Usually I would have done this work inside a service but I would rather avoid using a Service and do everything inside my browser activity.
Could I use SharedPreferences to save both the boolean and the AutoTrain instead of using static references?
SharedPreferences allows only primitives as far as I know but I think with google-gson one can save also objects.
Although I am not sure how this will impact efficiency (speed in particular).