动态处理内存泄漏

Handle memory leak dynamically

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

我刚刚在一次面试中遇到了这个问题。问题是

How to detect memory leak when application is running on user's device and save the data before crash(OutOfMemoryError) .

我可以猜到一个 BaseActivity,比如为所有 Activity 创建一个 BaseActivity 并将数据保存在 onStop() 中。

我也可以猜测扩展 Error class in the BaseActivity, but unfortunately java does not supports Multiple Inheritance and also there is no particular method in Error class 以动态检测任何错误 AFAIK。

以上情况我可能是错的。

还有其他方法吗?

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

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

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