本页面包含有关查找和触发基于 View 的布局特有的内存泄漏的信息。如需了解有关捕获和 分析堆转储的核心信息,请参阅捕获堆转储。
查找内存泄漏
如需快速过滤可能与内存泄漏关联的类,请打开类下拉列表并选择显示 activity/fragment 泄漏 。Android Studio
会显示它认为表明应用中的
Activity和
Fragment实例存在内存泄漏的类。过滤器显示的数据类型包括以下内容:
- 已销毁但仍被引用的
Activity实例。 Fragment没有有效的FragmentManager但仍被 引用的实例。
请注意,在以下情况下,过滤器可能会产生误报:
- 已创建
Fragment,但尚未使用它。 - 正在缓存
Fragment,但它不是FragmentTransaction的一部分。
如需更手动地查找内存泄漏,请浏览类和实例列表,以查找具有较大保留大小 的对象。查找由下列任意情况引起的内存泄漏:
- 长时间引用
Activity、Context、View、Drawable和其他对象 ,可能会保持对Activity或Context容器的引用。 - 可以保持
Activity实例的非静态内部类,如 aRunnable。 - 对象保持时间比所需时间长的缓存。
找到潜在的内存泄漏时,请使用实例详情 中的字段 和引用 标签页跳转到感兴趣的实例或源代码行。
触发内存泄漏以进行测试
如需触发内存泄漏以在应用中进行测试,您可以通过以下某种方式触发泄漏:
- 在不同的 activity 状态下,先将设备从纵向旋转为横向,再将其旋转回来,这样反复旋转多次。旋转设备经常会使应用
泄露
Activity、Context或View对象,因为系统会重新创建Activity,而如果您的应用在其他地方保持对这些对象其中一个的引用,系统将无法对其进行垃圾回收。 - 在不同的 activity 状态下,在您的应用与其他应用之间切换。 例如,导航到主屏幕,然后返回到您的应用。