boo-urns
boo-urns

Reputation: 10376

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

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?

Upvotes: 3

Views: 1458

Answers (2)

sharadendu sinha
sharadendu sinha

Reputation: 827

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.

Upvotes: 4

kosa
kosa

Reputation: 66637

When class is unloaded, then static variable someBoolean will be eligible for GC.

someBoolean will be initiated on class initiation (after load).

someBoolean stay false until you set another value in code.

Upvotes: 2

Related Questions