Android软件性能检测工具讲解

1 静态代码质量检测工具

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


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

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



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

猜你喜欢

转载自blog.csdn.net/android_hdh/article/details/78260741