Android软件性能检测工具讲解
程序员文章站
2024-03-18 10:21:10
...
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