欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android软件性能检测工具讲解

程序员文章站 2024-03-18 10:21:10
...

1 静态代码质量检测工具

Android Studio—>Analyze—>Inspect Code通过静态代码质量检测工具可以删掉工程中无用的资源文件、发现潜在的内存泄漏问题、明显的代码问题、简化代码等等,如下图它列举出了所有的存在的问题,点击进行修改

Android软件性能检测工具讲解

2  使用严格模式(StrictMode)

StrictMode就是用来指定一系列策略(policy),对相应规则(rule)进行检查并且做出反应。

策略类型

目前,有两种类型的策略:

  • Thread Policy : 线程策略应用到特定的线程。
  • VM Policy : VM是Virtual Machine的缩写,表示“虚拟机”,不要搞错以为是Virtual Memory(虚拟内存)。应用于虚拟机进程中的所有线程。

ThreadPolicy.Builder中的一些方法:

  • detectAll() : 侦测一切潜在违规
  • detectCustomSlowCalls() : 侦测自定义的耗时操作
  • detectDiskReads() : 侦测磁盘读
  • detectDiskWrites() : 侦测磁盘写
  • detectNetwork() : 侦测网络操作
  • permitAll() : 禁用所有侦测
  • permitDiskReads() : 允许磁盘读

VmPolicy.Builder中的一些方法 :

  • detectAll() : 侦测一切潜在违规
  • detectActivityLeaks() : 侦测Activity(活动)泄露
  • detectLeakedClosableObjects() : 当显式中止方法调用之后,假如可被Closeable类或其他的对象没有被关闭。
反馈机制

  • penaltyDeath() : 违规时,直接使应用崩溃。
  • penaltyDialog() : 违规时,向开发者显示一个恼人的Dialog对话框。
  • penaltyLog() : 违规时,将违规信息写入系统日志。
使用方法

在Application中的onCreate方法中添加

if (BuildConfig.DEBUG) {
            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                    .detectDiskReads()
                    .detectDiskWrites()
                    .detectNetwork()
                    .detectCustomSlowCalls()
                    .penaltyDeath()
                    .build());
            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                    .detectLeakedSqlLiteObjects()
                    .detectLeakedClosableObjects()
                    .detectLeakedRegistrationObjects()
                    .detectActivityLeaks()
                    .penaltyDeath()
                    .build());
        }

扩充StrictMode

1.用getThreadPolicy() 或getVmPolicy()获得当前策略。

2.用setThreadPolicy() or setVmPolicy()来扩充它。

例如

StrictMode.ThreadPolicy oldPolicy = StrictMode.getThreadPolicy();
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder(oldPolicy)
    .permitDiskWrites()  // 在原有策略的规则基础上,不监测读写磁盘
    .build());

StrictMode.VmPolicy oldPolicy = StrictMode.getVmPolicy();
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder(oldPolicy)
    .detectActivityLeaks()   // 侦测Activity泄漏
    .build());

在设置中开启StrictMode

设置->开发者模式->严格模式

Android软件性能检测工具讲解

3 内存泄漏检测工具(Leakcanary)

使用方式

首先在app 目录下的build.gradle中添加依赖

compile 'com.squareup.leakcanary:leakcanary-android:1.5.4'
compile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
然后在Application中的onCreate方法中写入

LeakCanary.install(this);

具体详细的使用方式移步

Leakcanary的github的地址
LeakCanary的中文使用文档

4显示启动时间

在terminal中执行如下命令便可显视Activity的启动时间

adb shell am start -W packagename/activityname

Mini:RxJavaDemo hua$ adb shell am start -W net.ishandian.demo.rxjavademo/.MainActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=net.ishandian.demo.rxjavademo/.MainActivity }
Status: ok
Activity: net.ishandian.demo.rxjavademo/.MainActivity
ThisTime: 1570
TotalTime: 1570
WaitTime: 1585
Complete

参考

http://www.jianshu.com/p/113b9c54b5d1

http://www.jianshu.com/p/dab8324c5500