如何使用新的 AndroidProfiler 处理内存泄漏

2024-04-06

我正在尝试学习如何识别和处理我的应用程序中的内存泄漏。我正在读这个很棒的文章 https://medium.com/freenet-engineering/memory-leaks-in-android-identify-treat-and-avoid-d0b1233acc8,但我对如何在 Android Studio 3.0 附带的新“Android Profiler”工具中应用它有点困惑。

我有一个测试应用程序,LeakCanary 指出我的应用程序存在内存泄漏。

事实上,当我运行分析器并按“dump java heap”时,我可以看到 MyCollectionActivity 有 4 个实例,当我单击这些实例时,我可以看到详细信息:

但文章中显示的工具具有我在“Android Profiler”中看不到的选项:

我不会深入讨论如何浏览巨大的内存堆。 相反,我将引导您注意上方的分析器任务 下面屏幕截图的右上角。您所要做的就是检测 上例中介绍的内存泄漏是检查Detect Leaked 活动,然后按播放以显示泄露的活动 在分析结果下。

例如,在新工具中,显示存在泄漏的实例的“分析器任务”和“分析结果”在哪里?

如果我们选择泄露的活动,我们会看到一个参考 保持活动活动的引用可以位于树中 确定。通过寻找深度为零的实例,我们发现 位于位置管理器内的实例 mListener 是原因 我们的活动不能被垃圾收集。

Android Profiler 的图像也没有显示参考树,它显示了参考,但它似乎不是很有用。


  1. 首先,您需要save the 堆转储。带扩展名的转储保存hprof。检查下面所附的图像以保存此文件。
  2. 在Android Studio中打开同一个文件,之后你将能够看到分析器任务右上角的选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用新的 AndroidProfiler 处理内存泄漏 的相关文章

随机推荐

  • 乘以 unsigned Short 会导致未定义的行为吗?

    作为 的后续行动 https stackoverflow com questions 33732041 why static castunsigned intushrt maxushrt max yields Correct value h
  • NSManagedObject 中的可变集?

    自动生成的标准声明NSManagedObjectproperty 声明了这样的多对多关系 property nonatomic retain NSSet somethings dynamic somethings 将该声明更改为安全吗 NS
  • Processing.js 定时器

    我正在使用Processing js 开发一个应用程序 在绘图循环的每一步 我都会将帧数增加一frame 我想知道已经过去了多少时间 目前为了获取时间 知道我的应用程序设置为以 60FPS 运行 我确实这样做 time frame 60 但
  • Laravel cookie::forget 不起作用?

    我有这个代码 Cookie forget vendor return Redirect route vendor login 它应该做的是删除供应商 cookie 并将您重定向到登录页面 然而 它实际上并没有删除 cookie 根据我的理解
  • Laravel hasOne 通过数据透视表

    所以我有2种模式 User和Profile 关系设置如下 User belongs to many Profile return Illuminate Database Eloquent Relations belongsToMany pu
  • 使用 SetParent 将 HWND 嵌入到外部进程中

    我正在尝试使用以下命令将进程中的窗口嵌入到外部进程的窗口中设置父级功能并遇到了一些问题 首先 以下概述了我当前正在将窗口嵌入到应用程序中的操作 HWND myWindow Handle to my application window HW
  • 将 Ed25519 转换为 RSA 指纹(或如何查找 SSH 指纹)

    BizTalk 将内部 SFTP 测试的指纹视为 ssh rsa 2048 33 88 f0 ff 63 78 a9 2b 3f 09 cb 05 81 db 59 86 WinSCP 显示 ssh ed25519 256 ff 2e 5e
  • jQuery 中的双击功能不起作用

    我在一个页面中有两个 span 元素 当我在两者上调用 jquery 双击函数时 仅在第一个元素上调用该函数 我正在使用以下代码 span 1 span span 1 span jquery 函数是 id shiftTime dblclic
  • Eclipse - @SuppressWarnings("javadoc") 不起作用

    我将 Eclipse 配置为显示有关公共元素缺少 javadoc 注释和标签的警告 这对我来说非常有用 可以很好地记录我的代码 但有时我有一堂课 其中有几个常量描述例如 DFA 的状态或其他东西 不需要记录这些常量 因为它们是不言自明的 所
  • JIRA 插件:从哪里开始

    我被要求创建一个简单的 JIRA 插件 它结合了工作流程 自定义字段 条件步骤 我刚刚开始安装 JIRA 并最终成功创建了一个运行简单的 Hello World 插件 我已经对这个界面有多大感到困惑 似乎无法掌握大局 你们中的任何人都可以带
  • 用于在 C 中重命名文件的 Win32 API

    如果源目录和目标目录 MoveFile 实际上会将源文件复制到目标文件中 这意味着我最终会看到两个文件 这是实现重命名的最佳方式吗 The MoveFile http msdn microsoft com en us library aa3
  • SQL死锁问题

    在关系数据库中这两条语句有可能死锁吗 我试图简化我的问题和示例 请假设这些选择 我认为通常只需要可共享读锁定 现在需要独占读锁 Concurrent Connection 1 SELECT FROM A JOIN B ON Concurre
  • ADO Recordset 到 Excel 电子表格在 Excel 2007 中正确打开,但在 Excel 2013 中缺少参数

    我的电子表格正在使用 ADO 从另一个电子表格读取数据 VBA 代码在 MS Excel 2007 中正常工作 但是 在 MS 2013 中 打开记录集会生成错误 No value given for one or more require
  • 快速排序和霍尔分区

    我很难将带有 Hoare 分区的 QuickSort 翻译成 C 代码 并且无法找出原因 我正在使用的代码如下所示 void QuickSort int a int start int end int q HoarePartition a
  • 计算套接字上传速度

    我想知道是否有人知道如何用 C 计算 Berkeley 套接字的上传速度 我的send调用不会阻塞 发送 5 MB 数据需要 0 001 秒 但需要一段时间才能发送recv响应 所以我知道它正在上传 这是一个到 HTTP 服务器的 TCP
  • crypto/ssh ParsePublicKey“短读”错误

    在我正在开发的程序中 我需要一种在开发过程中将公钥添加到authorized keys 文件中的方法 因此我使用命令行参数来执行此操作 我省略了大部分代码 但是如果您想查看所有代码 这是存储库 https github com george
  • 元编程:从 boost mpl::vector 中的每个类继承

    我希望继承包含在 boost mpl vector 中的一组类 这可能吗 具体来说 我想延长test对于任意多个模板参数 作为 mpl vector 传递 template
  • 致命:无法连接到 github.com: github.com[0: 140.82.121.4]: errno=未知错误

    我的 Git 帐户有问题 每次我执行git push 我收到以下错误 我发现我正在使用 SSH URL 我尝试使用以下命令切换回 HTTPS URL git config global url https github com instea
  • 如何在 Tensorflow 2.0 中使用 K.get_session 或如何迁移它?

    def init self kwargs self dict update self defaults set up default values self dict update kwargs and update with user o
  • 如何使用新的 AndroidProfiler 处理内存泄漏

    我正在尝试学习如何识别和处理我的应用程序中的内存泄漏 我正在读这个很棒的文章 https medium com freenet engineering memory leaks in android identify treat and a