Android使用Profiler查看应用内存分析的操作步骤

 更新时间:2023年10月27日 09:27:00   作者:淘淘养乐多  
内存分析是Profiler中的一个组件,可以帮助我们识别可能会导致应用卡顿、冻结甚至崩溃的内存泄露和内存抖动,本文小编将给大家介绍一下Android使用Profiler查看应用内存分析的操作步骤,需要的朋友可以参考下

内存分析是Profiler中的一个组件,

可以显示应用内存使用情况实时图表,帮助我们捕获堆转储、强制执行垃圾回收以及跟踪内存的分配情况。

打开内存分析步骤:

1、依次点击View→Tool Window→Profiler

2、从Profiler工具栏中选择要分析的设备以及应用进程。(需要优先确保设备通过USB正常连接IDE)

3、点击MEMORY时间轴上的任意位置可以打开内存分析。

一、分析应用内存的目的

当应用存在不再使用的某些对象时,垃圾回收器会将未使用的内存释放。如果应用分配内存的速度比系统回收的速度快时,回收器要释放足够的内存来满足应用的分配需要时,应用可能会产生延迟,从而可能导致应用跳帧,使应用明显变慢。

即使应用使用过程中未表现出变慢,但如果存在内存泄漏,应用挂在后台运行时,依然会保留相应的内存。从而导致系统强制执行不必要的垃圾回收时间,从而拖慢系统其余部分的内存性能,最终使系统被迫终止应用进程以回收内存。致使用户返回应用时,必须重启。影响到用户体验。

因此可以通过以下几种操作从而防止这些问题:

1、在时间轴上查找可能会导致性能问题的不理想内存分配进行查看;

2、转储java堆以便查看在任何给定时间内有哪些对象在占用内存。在一个较长的时间段内进行多次堆转储有助于分析内存泄漏点,常用该种方式检测;

3、记录正常与极端情况下用户交互期间的内存分配情况。从而准确识别代码中可能存在的短时间内分配过多对象而出现泄漏的情况。

二、Profiler概览

打开Profiler后,选择设备以及应用,则可以看到时间轴界面,其中包含CPU、MEMORY、ENERGY的情况。其中MEMORY为内存分析器、ENERGY为电池分析器;

其中我们主要是用内存分析器工具。

当中有三项选择:Capture heap dump:获取堆转储,该为目前主要检测手段,稍后讲解;
Record native allocations:获取设备上录制原生分配情况;
Record Java/Kotlin allocations:获取录制Java和Kotlin分配情况;

三、查看内存分配情况

1、内存分配情况表可以显示内存中每个java对象和JNI引用的分配方式。因此,内存分析器可以显示有关对象分配情况信息如下:

--分配了哪些类型的对象以及他们使用了多少空间;

--每个分配堆栈的轨迹,包括在哪些线程中;

--对象何时被取消分配等;

如果需要中Android 10以及更高版本的设备上录制原生分配情况,需要选择Record native allocations,然后点击Record,录制会持续到点击Stop为止,之后内存分析界面会转换到显示原生录制的屏幕中。

注意:低于android10,record native allocations选项不可使用。

如果需要录制java和kotlin分配情况,请选择record java/kotlin allocations,然后选择record。如果设备搭载的是android8+,则内存分析将可以转换显示就行录制的界面,可以按紧选中某一块区域进行查看。

四、捕获堆转储

堆转储显示捕获堆转储时应用中对象正在使用的内存,尤其是在长时间的操作中,堆转储会显示认为不应该再存在的内存对象,从而帮助识别内存泄漏。
如果需要捕获堆转储,需要选择capture heap dump,然后选择record。一段时间后,就会生成heap dump,可进行查看,也可以通过第三方工具Memory Analyzer进行查看。

由于新版IDE剔除了Memory Analyzer工具,因此,目前查看需要通过eclipse中的插件工具memory analyzer进行查看。可通过工具下载进行试验:[http://www.eclipse.org/mat/downloads.php]
通过工具打开phrof文件,进入主界面

点击leak suspects可查看疑似内存泄漏的地方,点击detail可以查看分析出ArryList存放对象Person出了问题。

也可以在overview中点击dominator_tree查看堆占比,可以看出一个线程占比过高,集合中对象的数量过多等。

以上就是Android使用Profiler查看应用内存分析的操作步骤的详细内容,更多关于Android Profiler查看应用内存分析的资料请关注脚本之家其它相关文章!

相关文章

  • Android中Market的Loading效果实现方法

    Android中Market的Loading效果实现方法

    这篇文章主要介绍了Android中Market的Loading效果实现方法,较为详细的分析了Android中loading效果的相关布局及功能实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android之有效防止按钮多次重复点击的方法(必看篇)

    Android之有效防止按钮多次重复点击的方法(必看篇)

    下面小编就为大家带来一篇Android之有效防止按钮多次重复点击的方法(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Android 8.0实现蓝牙遥控器自动配对

    Android 8.0实现蓝牙遥控器自动配对

    这篇文章主要为大家详细介绍了Android 8.0实现蓝牙遥控器自动配对,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Android Notification实现动态显示通话时间

    Android Notification实现动态显示通话时间

    这篇文章主要为大家详细介绍了Android Notification实现动态显示通话时间,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • APK程序获取system权限的方法

    APK程序获取system权限的方法

    这篇文章主要介绍了APK程序获取system权限的方法,涉及Android程序权限操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Flutter中抽屉组件Drawer使用详解

    Flutter中抽屉组件Drawer使用详解

    这篇文章主要为大家详细介绍了Flutter中抽屉组件Drawer使用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Android实用小技巧之利用Lifecycle写出更好维护的代码

    Android实用小技巧之利用Lifecycle写出更好维护的代码

    lifecycle是一个类,用于存储有关组件(如Activity或Fragment)的生命周期状态的信息,并允许其他对象观察此状态,下面这篇文章主要给大家介绍了关于Android实用小技巧之利用Lifecycle写出更好维护的代码的相关资料,需要的朋友可以参考下
    2022-05-05
  • 浅析Android中的visibility属性

    浅析Android中的visibility属性

    以下是对Android中的visibility属性进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • Android图像处理之霓虹滤镜效果

    Android图像处理之霓虹滤镜效果

    这篇文章主要介绍了Android图像处理之霓虹滤镜效果的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android使用ViewPager实现启动引导页

    Android使用ViewPager实现启动引导页

    这篇文章主要为大家详细介绍了Android使用ViewPager实现第一次启动引导页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07

最新评论