阅读 248

Android性能优化之性能优化工具

性能优化的帮助工具:

MAT,
Memory Monitor(属于AndroidMonitor中一个模块),
HeapTool(查看堆信息),
Allaction Tracking,
LeakCanary
Lint工具

1.Allaction Tracking

(1)追踪

 

在内存图中点击途中箭头的部分,启动追踪,再次点击就是停止追踪,随后自动生成一个alloc结尾的文件,这个文件就记录了这次追踪到的所有数据,然后会在右上角打开一个窗口。展示和第一种方式有点区别,各有所长,他有两种展现方式。

(2)分类我们的内存分配

 

红框中

Group by Method:用方法来分类我们的内存分配,默认会以Group by Method来组织
Group by Allocator:用内存分配器来分类我们的内存分配

我们用 Group by Allocator的方式来查看一下。

可以看到我们自己包中,每一个类的内存分配次数和分配的大小。如果我们想看内存分配的实际在源码中发生的地方,可以选择需要跳转的对象,点击该按钮就能发现我们的源码。

(3)查看统计图

想看某个图层详细内存分配,则双击速表左键进入下一图层

 

内存分配情况

通过[Layout方式查看更直观

 

2.LeakCanary
(1)配置


Getting started In your build.gradle:  dependencies {    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.2'    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.2'  } In your Application class: public class ExampleApplication extends Application {   @Override public void onCreate() {     super.onCreate();     if (LeakCanary.isInAnalyzerProcess(this)) {       // This process is dedicated to LeakCanary for heap analysis.       // You should not init your app in this process.       return;     }     LeakCanary.install(this);     // Normal app init code...   } } 复制代码

(2)制造一个单例内存泄漏的点


public class CommonUtils {     private static CommonUtils instance;     private Context context;     private CommonUtils(Context context) {         this.context = context;     }     public static CommonUtils getInstance(Context context) {         if (instance == null) {             instance = new CommonUtils(context);         }         return instance;     } } 复制代码


 protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         CommonUtils commonUtils = CommonUtils.getInstance(this);     } 复制代码

(3)LeakCanary 发出内存泄漏通知

 

(4)LeakCanary 分析
LeakCanary 本质上还是用命令控制生成hprof文件分析检查内存泄漏。

3.Lint分析工具

Android Studio很方便,很好用,你可以试试点击AS菜单栏上面的Analyze选项,然后点击Inspection Scope,然后选择你需要检测的范围(比如整个项目),然后AS会自动弹出下图所示的面板

 

可能出现内存泄漏的类


检测资源文件是否有没有用到的资源。 检测常见内存泄露 安全问题SDK版本安全问题 是否有费的代码没有用到 代码的规范---甚至驼峰命名法也会检测 自动生成的罗列出来 没用的导包 可能的bug


作者:冬日毛毛雨
链接:https://juejin.cn/post/7033264269713997838


文章分类
ANDROID
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐