【Android】Profiler的使用
短信预约 -IT技能 免费直播动态提醒
【Android】Profiler的使用
前言
最近在做地图相关业务的时候,发现进入导航的一瞬间系统特别卡,当时就是用的profiler工具分析出来是因为高德的SDK在进入导航的时候短时间内创建了大量的对象引起内存抖动。这次主要简单介绍Profiler关于分析内存的简单使用,可以分析内存泄漏或者观察应用以及引用的SDK创建了多少对象。
一、菜单介绍
下面是上图每个数字对应的简单的介绍
- 选择【MEMORY】进行内存分析
- 记录系统内存变化,可分析是否有内存泄漏
- 一段时间内C/C++的对象的使用数量
- 一段时间内Java/kotlin对象的使用数量
- 开始/暂停
- 内存变化区域
二、使用步骤
1.准备程序
主要是写一个最简单的mainActivity跳转到SecondActivity的程序,SecondActivity有内存泄漏且创建两个简单的对象
主要代码如下:
public class SecondActivity extends AppCompatActivity { //内存泄漏的对象(内存泄漏分析使用) private static Activity object1 = null; // 观察的创建的对象(记录创建多少对象使用) private ObserveObject observeObject1; private ObserveObject observeObject2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); //内存泄漏的代码 object1 = this; //创建观察的对象 observeObject1 = new ObserveObject(); observeObject1.test(); observeObject2 = new ObserveObject(); observeObject2.test(); }}
public class ObserveObject { public void test(){ }}
2.内存泄漏分析
- 点击Profiler菜单,选择自己的程序进入以下界面,然后选择【Capture heap dump】菜单
- 进入我们的程序,点击按钮进入SecoondActivity,然后再返回MainActivty。最后点击【Record】
分析区显示我们进入了MainActivty,SecoondActivity,MainActivty。 - 左边会生成一个Heap Dump文件,上面会显示有内存泄漏了
- 切换以包的形式查看,找到我们的程序的包名,找到对应的Activity,就能找到内存泄漏的对象
- 修改我们的程序再次观察,内存泄漏的情况没有了
@Override protected void onDestroy() { super.onDestroy(); object1 = null; }
3.记录对象数量
- 我们在SecondActivity中创建了两个ObserveObject对象的,这次选择【Record Java / Kotlin allocations】菜单,这次要先点击【Record】按钮,然后进入程序,进入SecondActivity,返回MainActivity,点击垃圾回收,再进入SecondActivity,再返回MainActivity。找到我们的包名,找到对应的SecondActivity,可以发现创建了4个ObserveObject,后面为存活时间。时间为空表示还存活着。因为我们在第一次返回MainActivity的时候回收对象了,所以前两个就被回收了,后面的两个还是存活的。
3.注意
分析内存泄漏的时候要先操作APP最后点击【Record】。记录对象数量和存活时间先点击【Record】,再操作APP,最后结束后再分析。
总结
以上就是Profiler的简单使用,后续会补充其他用法。
来源地址:https://blog.csdn.net/qq_36185750/article/details/130162888
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341