1.通过adb shell dumpsys meminfo packageName来查看内存使用状况

在没有打开应用的情况下,该命令返回的数据是这样的:

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

可以看到打印出来很多的信息,而对于我们查看Activity内存泄漏来说,只需要关注Activities和Views两个信息即可,在应用中存在的Activity对象有一个,存在的View对象有13个。

3.这时候我们退出这个Activity,在用命令查看一下:

可以看到,Activity对象和View对象都在极短的时间内被回收掉了。再次打开,退出,多次尝试,发现情况都是一样的。我们可以通过这种方式来简单判断一个Activity是否存在内存泄漏,最后是否能够被回收。

4.再运行刚才的泄漏的例子,用命令查看一下:

当我们连续打开退出同一个页面,然后使用命令查看时,发现Activity存在13个,而View则存在了234个,而且没有很快被回收,依次判断应该是存在内存泄漏了。

等待10多秒,再次查看,发现Activity和View的数量都变成了0。

上面的例子,是Handler临时性内存泄漏,只要Handler post的代码块执行完毕,被引用的Activity就能够释放。

除了临时性内存泄漏,还有危害更大,直到程序结束才能被释放的内存泄漏。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐