Main Activity is not garbage collected even after finish because it is referenced by InputMethodManager indirectly .
Many times we see that when an android app is closed (means the last activity is finished ), we get that the main activity is not garbage collected as is is referenced by InputMethodManager indirectly , mainly this issue comes when we use RecyclerView in the fragment associated with FragmentStatePagerAdapter in that activity , TreeObserver or something related with InputMethodManager being used.
Even after onDestroy() of that main activity is being called the app keeps the reference of that activity as it is referenced by InputMethodManager indirectly.
So, we cannot fix it, as it’s due the bug in Android Source code
There can be some ways to fix it but we did not get the way to fix it . After some observations we realize that if any other activity is being called after that the finish of main activity the things is going perfect , no more Memory Leaks by InputMethodManager.
So we created the DummyActivity.java like this
And a theme in styles.xml and added that in Androidmanifest.xml
And added the following code in MainActivity.java
In this way , Dummy activity is being called after the Main Activity but cannot be noticed as 500ms is too small and even the dummy activity is transparent , so no chance of any side-effect or being noticed.
LeakCanary (A powerful library for finding memory leaks) : The developers of LeakCanary has also mentioned to ignore this leaks (Link) as it’s a bug in android source code.
But this is the way that we found to fix the memory leak created by InputMethodManager in MainActivity.
Hope this helps. Please recommend it so that other developers get benefit till the google solve this issue.
Read about Fast Android Networking here.