一、SysTrace
- 不能显示程序执行的代码信息,发现了问题,也不能定位问题的位置
- sdk中tools工具包中monitor经常打不开,需要jdk版本的配合,如果打不开可以用命令行的形式来进行分析,systrace路径为
android-sdk/platform-tools/systrace/
- 命令行执行需要使用mac默认版本python2.7
- 命令例子:
python systrace.py -t 3 -o ~/mytrace.html -a com.android.test gfx view wm am res sync
- 通常我们在怀疑引起jank代码地方,添加如下内容:
Trace.beginSection("MyAdapter.onCreateViewHolder");
和 Trace.endSection();
二、traceView
- trace文件的生成有几种方式
一种是通过AndroideStudioCPU分析器生成
一种是DDMS生成
一种是通过代码:android.os.Debug.startMethodTracing(String traceName); android.os.Debug.stopMethodTracing();
在sdcard/Android/data/包名目录有生成的文件。这咱方法方便定位问题
三、命令行工具:dumpsys
- 配合linux的watch命令对比查看memInfo,操作后查看内存分配情况
watch -n 2 -d 'adb shell dumpsys meminfo [pkgname|pid] -d'
- 查看gpu绘制性能,后面的-d是表示显示详细信息
watch -n 2 -d 'adb shell dumpsys gfxinfo [pkgname]'
还可以查看数据库的性能问题,-d是高亮显示不同。
四、strictMode
- 开启strictMode,在发生性能问题时打钱log或者应用崩溃来提示开发者,及时修正不合理代码
- 代码如下:
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.build());
五、手机中开发者选项
- 勾选不保留活动,以测试Activity的回收情况,有没有内存泄露的情况
- 高度GPU过度绘制,显示过度绘制区域,根据颜色区分是否发生了过度绘制
- GPU呈现模式分析,在屏幕上显示为条形图,根据每一帧的绘制情况,来检查是不是绘制耗时,条形图的颜色可以区分是ondraw,layout布局,还是主线程有耗时操作。
六、微信Matrix
- 应用瘦身
- 启动时间分析
这两个是比较有用的工具,其它可以再研究一下。
七、其它一些命令
- 查看应用进程名称
adb shell ps | grep [key word]
- 查看Activity启动时间,一般是看totalTime
adb shell am start -W com.sohu.sohuhy.dev/hy.sohu.com.app.login.view.SplashActivity
adb shell am start -W com.sohu.sohuhy.dev/hy.sohu.com.app.MainActivity
- 查看Activity启动Log,过滤ActivityManager中的Displayed,在异步方法结束时加上
reportFullyDrawn
Log信息中将会计算异步的时长。
八、一些经验
- 加载优化:
延时加载,在界面完全显示出来后,加载耗时功能,
异步加载
懒加载,使用时再加载
网友评论