Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android garbage collector - when do static (class level) var get reset?

Tags:

java

android

How does Android handle static classes? In particular, if I declare a static variable like this:

private static boolean someBoolean = true;
...
// Somewhere else in the code I do this:
    someBoolean = false;

Let's also say that that last line is the only time someBoolean's value changes from its initialized value. How long will someBoolean stay false? How can the user reset this? Will force closing the app work? Do you have to uninstall the app? Clear its data? Its cache?

What if this static variable is in someone else's SDK? I think I understand how variables are re-instantiated when they're in the app code that I wrote, but what if this is code that's loaded from some jar -- when will someBoolean get re-declared and subsequently initialized to true? Similar to above, how can the user force this behavior? Force close? Clear data?

like image 851
user5243421 Avatar asked Dec 18 '25 03:12

user5243421


1 Answers

Static variables are initialized when class is loaded by the ClassLoader. Every Virtual Machine instance will have at lease one ClassLoader. Every java process be it on any OS will have one Virtual Machine. Thus to reset the variable you will have to force kill/stop the process. Remember in Android a process associated with an Activity will continue to remain in background and hence will retain all its static variables even after Activity is pause.

You can verify this behaviour by using DDMS and force killing the process associated with your Activity.

like image 137
sharadendu sinha Avatar answered Dec 20 '25 15:12

sharadendu sinha