我知道在Android应用程序中有很多关于内存泄漏/处理内存泄漏的讨论,但可以动态处理。
我在接受采访时得到了这个问题。问题是
如何在用户设备上运行应用程序时检测内存泄漏,并在崩溃前保存数据(OutOfMemoryError)。
我可以猜到BaseActivity,就像为所有活动制作一个BaseActivity并将数据保存在onStop()中。
我也可以猜测在BaseActivity中扩展Error类,但遗憾的是java不支持多重继承,并且Error类中没有特定方法可以动态检测任何错误AFAIK。
在上述情况下我可能会错。
还有其他办法吗?
答案 0 :(得分:1)
我可能会使用与Leakcanary相同的方法。你可以阅读它here。
简而言之,他们正在创建对象之间的弱引用。 GC之后,他们正在检查参考是否被清除。如果不是,他们正在转储堆,并分析转储。 Analyzer计算GC Roots的最短强引用路径,以确定是否存在泄漏,然后构建导致泄漏的引用链。在那一刻,如果有泄漏,您可以保存所需的所有数据。
问题是,如果要保存所有数据,则需要在主线程上执行所有这些操作。否则,应用程序可能会关闭,数据可能会丢失等。