捕获堆转储(视图)

Jetpack Compose 实现

本页面包含有关查找和触发基于 View 的布局特有的内存泄漏的信息。如需了解有关捕获和 分析堆转储的核心信息,请参阅捕获堆转储

查找内存泄漏

如需快速过滤可能与内存泄漏关联的类,请打开类下拉列表并选择显示 activity/fragment 泄漏 。Android Studio 会显示它认为表明应用中的 ActivityFragment实例存在内存泄漏的类。过滤器显示的数据类型包括以下内容:

  • 已销毁但仍被引用的 Activity 实例。
  • Fragment 没有有效的 FragmentManager 但仍被 引用的实例。

请注意,在以下情况下,过滤器可能会产生误报:

  • 已创建 Fragment,但尚未使用它。
  • 正在缓存 Fragment,但它不是 FragmentTransaction 的一部分。

如需更手动地查找内存泄漏,请浏览类和实例列表,以查找具有较大保留大小 的对象。查找由下列任意情况引起的内存泄漏:

  • 长时间引用 ActivityContextViewDrawable 和其他对象 ,可能会保持对 ActivityContext 容器的引用。
  • 可以保持 Activity 实例的非静态内部类,如 a Runnable
  • 对象保持时间比所需时间长的缓存。

找到潜在的内存泄漏时,请使用实例详情 中的字段引用 标签页跳转到感兴趣的实例或源代码行。

触发内存泄漏以进行测试

如需触发内存泄漏以在应用中进行测试,您可以通过以下某种方式触发泄漏:

  • 在不同的 activity 状态下,先将设备从纵向旋转为横向,再将其旋转回来,这样反复旋转多次。旋转设备经常会使应用 泄露 ActivityContextView 对象,因为系统会重新创建 Activity,而如果您的应用在其他地方保持对这些对象其中一个的引用,系统将无法对其进行垃圾回收。
  • 在不同的 activity 状态下,在您的应用与其他应用之间切换。 例如,导航到主屏幕,然后返回到您的应用。