当我在性能分析模式下运行时,我的应用程序停止响应

时间:2019-04-09 11:52:30

标签: android memory-leaks profiler

我的Android应用程序的长时间运行会话中出现一些OutOfMemory错误。为了找到原因,我尝试使用Android Studio Profiler,但它停止工作并在使用后10秒钟内冻结了该应用程序。

有一个Android Studio屏幕截图。它会在头几秒钟内记录活动,然后冻结应用程序并停止记录任何内容-> https://ibb.co/QXLhqnz

我的logcat的最后几行读取(随着时间的增加,最后几行不断重复,我更改了程序包名称)

2019-04-09 08:42:41.151 19728-20399/br.com.xxxxx V/StudioProfiler: Live memory tracking enabled.
2019-04-09 08:42:41.151 19728-20399/br.com.xxxxx V/StudioProfiler: JNIEnv not attached
2019-04-09 08:42:41.483 19728-20399/br.com.xxxxx V/StudioProfiler: Loaded classes: 8894
2019-04-09 08:42:51.688 19728-20399/br.com.xxxxx E/zygote: E[0]:Timed out waiting for threads to suspend(br.com.xxxxx), waited for 10.000s
2019-04-09 08:43:01.689 19728-20399/br.com.xxxxx E/zygote: E[0]:Timed out waiting for threads to suspend(br.com.xxxxx), waited for 20.000s
2019-04-09 08:43:11.689 19728-20399/br.com.xxxxx E/zygote: E[0]:Timed out waiting for threads to suspend(br.com.xxxxx), waited for 30.000s

任何帮助都感谢您。

1 个答案:

答案 0 :(得分:2)

Android Studio Profiler可能不是执行此任务的合适工具。首先使用LeakCanary识别可能的内存泄漏并进行修复, 那么您应该能够使用事件探查器,而不会导致线程停滞/中断。如果没有提供最少的代码,这可能是最好的答案。

出现这种现象的原因可能是,ART杀死了陷入困境的线程,而探查器却一直在等待它们响应,这显然不会发生,因为它们不再存在。

错误消息来自ART,请参阅thread_list.cc。在Dalvik VM上,其行为可能有所不同(很可能是由于OOM导致强制关闭,否则可能会使VM崩溃)。那可能值得一试。进行概要分析时也可以选择进入它,但是到目前为止,它不如LeakCanaray方便。


更新:Android Studio 3.6.2发行说明指出:

使用探查器时,改进了活动和片段的内存泄漏检测。