Ashwin Ashwin - 5 months ago 27
Android Question

Is GC guaranteed to free memory of unused activities

I am trying to analyze the memory usage of the

Android
app. I do that using

adb shell dumpsys meminfo <package name>


My app has only one
Activity
and I repeat the following steps probably a dozen of times:


  1. open the app;

  2. exit using the back button



After doing that a dozen of times
dumpsys
shows that around 1-2 instances of my
Activities
are still in memory. After I hit
adb dumpsys
for a couple of times the
Activity
count goes down to zero. Is this normal? If it is a leak I don't expect the
Activity
count to go down to zero. Does that mean
GC
claims the memory of the
Activity
objects slowly?

Answer

Does that mean GC claims the memory of the activity objects slowly?

Finishing an Activity by pressing the back button does not mean its instance will be immediately killed and the memory GC-ed. The Activity's onDestroy() method is not a "finalizer". One can meet the case when by the time of starting a new Activity instance the "old" one still resides in memory (as a reference).

If it is a leak I don't expect the activity count to go down to zero.

If you see the app's process running it's not a leak as "the activity count goes down to zero" (by the reason described above).

After I hit adb dumpsys for a couple of times the activity count goes down to zero. Is this normal?

Yes, with respect to above said.