简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查

这篇具有很好参考价值的文章主要介绍了简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简述

Android studio(下面简称AS)为App提供的性能分析工具,在AS3.0+替换掉旧的分析工具,对于其使用方法,官方也有对应的介绍:Android Profiler
对于使用方法,我只用到比较简单的功能,高级的还没用到,使用案例进行简答的使用,在此之前,你可能需要到官方文档中了解Profiler中一些字段的基本意思

Activity 内存泄漏检测用法

主要用到Profiler模块:

简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查

页面泄漏案例:

创建两个Activity 一个为默认Activity A,一个demo的Activity B,A启动B,然后在按下返回退出B页面,B中代码如下:

class ProfilerMainActivity : AppCompatActivity() {
    companion object {
  		//定义一个静态变量,引用Activity实例
        var refAct: ProfilerMainActivity? = null
    }

    private lateinit var student: Student

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_profiler_main)
        //让静态变量一直持有当前实例
        refAct = this

        student = Student()
        student.sayHello()
    }
}

接下来,我们先使用Profiler工具的Capture heap dump抓取一段内存堆数据:

A启动B后:

简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查
此时还是正常的情况

退出B

当我们退出B页面时重新抓取一段:
简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查
可以看出Activity的ondestroy生命周期已经执行完成,按道理页面已经被销毁,内存中不应该继续有该对象,而该对象正是被上面的静态变量引用导致GC一直不能释放该对象。

模拟解决该问题

在上面页面中finish操作:

class ProfilerMainActivity : AppCompatActivity() {
  //省略。。。。
    override fun finish() {
        super.finish()
        refAct = null
    }
}

再重复上面抓取步骤抓取一次内存数据:

简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查
可以看出,内存中仍然存在该对象,但是该对象已经没有谁引用他,那么 他将会在下一次GC回收垃圾时,被回收掉,这里我们直接强制GC执行垃圾回收,看看猜测是否正确:
简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查
抓取
简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查
可以发现,ProfilerMainActivity实例已经不再出现在内存当中。

使用Record Java/Kotlin allocations

主要记录一段时间中堆的对象个数、销毁时间
还是上面的代码 这次我们看Studen这个对象,执行操作A–》B–》A–》B,然后多次强制执行垃圾回收,抓取数据如下
简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查

看上图,Studen被创建两次,所以整个过程一共记录了两个对象,1和2,他们之间的区别是1中 Dealloc Time 不为空,没有Instance details 因为Student在第一次启动页面时创建,退出B页面后,被GC回收了 整个活跃时间为1s05ms,而2中Dealloc Time不为空 说明还没被回收,Instance details中记录了这个对象的堆栈信息,还在堆中活跃

总结

Profiler工具为了我们能方便查看内存泄漏的地方,专门提供了一个View app heap 分类来报告哪些页面泄漏,同时,我们还可以在里面查看非页面类有没有正常被释放,比如单例,当我们退出某个功能后,手动把单例置为空(”销毁“),我们只需在强制GC后抓取一段内存数据查看该对象是否仍在活跃即可。文章来源地址https://www.toymoban.com/news/detail-401676.html

到了这里,关于简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity 使用模拟器进行Profiler性能调试

    这篇文章主要记录如何实现通过模拟器对打包的app游戏进行Profiler调试。主要记录一些比较重要的点。 首先你要能够打包unity的安卓包,如果没有安装安卓组件,请先安装组件。 安装完成以后,会在unity的安装目录找到相应的SDK 这个platform-tools后面会用到,而这些组件设置了

    2024年02月07日
    浏览(54)
  • React中的性能测试工具组件Profiler的基本使用

    React中的性能测试工具组件Profiler是一个非常有用的工具,它可以帮助我们分析React应用程序的性能瓶颈。在本文中,我们将学习如何使用Profiler组件来测试React应用程序的性能。 首先,让我们来了解一下Profiler组件的基本用法。在React中,我们可以通过在组件树上添加Profiler组

    2024年02月11日
    浏览(38)
  • LeetCode155:最小栈,最简单的中等难度题,时间击败100%,内存也低于官方

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 最近运气不错,在LeetCode上白捡一道送分题,官方设定的难度是 中等 ,然而此题难度放在 简单 的题库中都是垫底的存在,对于刷题数太少的欣宸而言,这简直就是力扣的馈赠,建议大家也不要错过

    2024年02月09日
    浏览(35)
  • Android Studio Profiler 检查内存

    Android Studio Profiler  检查内存简单介绍 第一步:点击Profiler按钮  第二步:选择  第三步:选择Capture heap dump 并点击Record 垃圾桶按钮:用于强制执行垃圾回收事件的按钮,也就是GC。需要进行强制GC时可以点击。 Capture heap dump:抓取堆栈:(可以用来分析普通内存泄露问题)

    2023年04月17日
    浏览(54)
  • Java 使用hutool工具进行导出导入excel表格(代码很简单)

    创建一个Controller进行测试 

    2024年02月07日
    浏览(64)
  • Unity 内存性能分析器 (Memory Profiler)

    安装有两种 方式一: add package : com.unity.memoryprofiler 方式二: From Packages : Unity Registry 搜索 Memory Profiler 打开:Windows - Analysis - Memory Profiler 打开MemoryProfiler界面,可以链接真机检测,也可以在Editor检测。 点击Capture 保存当下帧的内容。 Capture 完毕之后,会保存本地一个镜像 :

    2024年02月03日
    浏览(65)
  • 简述如何使用Androidstudio对文件进行保存和获取文件中的数据

    在 Android Studio 中,可以使用以下方法对文件进行保存和获取文件中的数据: 保存文件: 创建一个 File 对象,指定要保存的文件路径和文件名。 使用 FileOutputStream 类创建一个文件输出流对象。 将需要保存的数据写入文件输出流中。 关闭文件输出流。 示例代码: 获取文件中

    2024年01月20日
    浏览(58)
  • Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用

    目录 Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用 一、简单介绍 二、NuGetForUnity 的下载导入 Unity 三、NuGetForUnity 在 Unity 的简单使用 Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。 本节介绍,使用 NuGet 在

    2024年02月07日
    浏览(45)
  • AndroidStudio AGP插件和Gradle之间的版本对应关系(官方)

    一,Android Gradle Plugins 版本和Gradle 版本的对应关系 官网资料 Android Gradle 插件版本说明  |  Android 开发者  |  Android Developers Google官方的文档,可以保证实时性和权威性  二,Gradle版本及下载 Gradle官方对应的各个版本信息及下载 Gradle | Releases 三,AS支持的AGP最低版本 AndroidSt

    2024年02月11日
    浏览(42)
  • pytorch性能分析工具Profiler

    https://zhuanlan.zhihu.com/p/360479566 PyTorch Profiler 是一个开源工具,可以对大规模深度学习模型进行准确高效的 性能分析 。包括如下等功能: 分析model的GPU、CPU的使用率 各种算子op的时间消耗 trace网络在pipeline的CPU和GPU的使用情况 Profiler 利用 Tensorboard 可视化 模型的性能 ,帮助发现

    2023年04月12日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包