Android内存泄漏查找和解决adb shell dumpsys meminfo packagement

时间:2024-04-12 07:10:46

1.通过adb shell dumpsys meminfo packageName来查看内存使用状况
在没有打开应用的情况下,该命令返回的数据是这样的:
Android内存泄漏查找和解决adb shell dumpsys meminfo packagement

2.打开这个应用的MainActivity,再通过命令查看:

Android内存泄漏查找和解决adb shell dumpsys meminfo packagement
可以看到打印出来很多的信息,而对于我们查看Activity内存泄漏来说,只需要关注Activities和Views两个信息即可,在应用中存在的Activity对象有一个,存在的View对象有13个。
3.这时候我们退出这个Activity,在用命令查看一下:
Android内存泄漏查找和解决adb shell dumpsys meminfo packagement
可以看到,Activity对象和View对象都在极短的时间内被回收掉了。再次打开,退出,多次尝试,发现情况都是一样的。我们可以通过这种方式来简单判断一个Activity是否存在内存泄漏,最后是否能够被回收。
4.再运行刚才的泄漏的例子,用命令查看一下:
Android内存泄漏查找和解决adb shell dumpsys meminfo packagement
当我们连续打开退出同一个页面,然后使用命令查看时,发现Activity存在13个,而View则存在了234个,而且没有很快被回收,依次判断应该是存在内存泄漏了。
等待10多秒,再次查看,发现Activity和View的数量都变成了0。
Android内存泄漏查找和解决adb shell dumpsys meminfo packagement
上面的例子,是Handler临时性内存泄漏,只要Handler post的代码块执行完毕,被引用的Activity就能够释放。
除了临时性内存泄漏,还有危害更大,直到程序结束才能被释放的内存泄漏。