动态处理内存泄漏

时间:2017-03-20 11:35:06

标签: java android memory-leaks runtime out-of-memory

我知道在Android应用程序中有很多关于内存泄漏/处理内存泄漏的讨论,但可以动态处理。

我在接受采访时得到了这个问题。问题是

  

如何在用户设备上运行应用程序时检测内存泄漏,并在崩溃前保存数据(OutOfMemoryError)。

我可以猜到BaseActivity,就像为所有活动制作一个BaseActivity并将数据保存在onStop()中。

我也可以猜测在BaseActivity中扩展Error类,但遗憾的是java不支持多重继承,并且Error类中没有特定方法可以动态检测任何错误AFAIK。

在上述情况下我可能会错。

还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

我可能会使用与Leakcanary相同的方法。你可以阅读它here

简而言之,他们正在创建对象之间的弱引用。 GC之后,他们正在检查参考是否被清除。如果不是,他们正在转储堆,并分析转储。 Analyzer计算GC Roots的最短强引用路径,以确定是否存在泄漏,然后构建导致泄漏的引用链。在那一刻,如果有泄漏,您可以保存所需的所有数据。

问题是,如果要保存所有数据,则需要在主线程上执行所有这些操作。否则,应用程序可能会关闭,数据可能会丢失等。

相关问题