1、布局性能检测
Systrace,内存优化工具中也用到了 Systrace,这里关注 Systrace 中的 Frames 页面,正常情况下圆点为绿色,当出现黄色或者红色的圆点时,表现出现了丢帧。
Layout Inspector,是 AndroidStudio 自带工具,可以查看页面的视图层次结构。
2、帧率检测
1、Choreographer,是 Android16 加入的一个工具类,通过 Choreographer.getInstance().postFrameCallback,可以实时获取 FPS。 VSYNC 信号回调监听,当 VSYNC 信号返回时,会执行 doFrame 回调函数。在 doFrame 方法中,我们统计每秒内的执行次数,以及记录当前帧的时间,并注册一下次监听。
2、 adb shell dumpsys SurfaceFlinger | grep + 包名启动页 (不然他获取的数据是只有一行数据),这个命令只需要执行一次
使用的是adb shell dumpsys SurfaceFlinger --latency "SurfaceView +包名/启动页"获取的,目前只支持安卓6.0以上。
使用adb 命令时,可以根据他的版本来进行拼接命令行
安卓7.0:adb shell dumpsys SurfaceFlinger --latency "SurfaceView +包名/启动页"
安卓8.0--安卓10: adb shell dumpsys SurfaceFlinger --latency "SurfaceView +包名/启动页#0"
安卓12:adb shell dumpsys SurfaceFlinger --latency "SurfaceView +包名/启动页(BLAST)#0"
adb shell dumpsys gfxinfo app的包名
3、CPU信息
1、读取/proc/cpuinfo 读取CPU的结构信息
2、cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 读取CPU工作频率
以上方法在Android 8以后会有限制
4、内存信息
ActivityManager activityManager = (ActivityManager) base.getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
Log.i("UtilsApplication","info.totalMem:"+memoryInfo.totalMem /(1024*1024));
Log.i("UtilsApplication","info.availMem:"+memoryInfo.availMem/(1024*1024));
Log.i("UtilsApplication","info.threshold:"+memoryInfo.threshold/(1024*1024));
Log.i("UtilsApplication","info.lowMemory:"+memoryInfo.lowMemory);
Log.i("UtilsApplication","getRuntime.totalMem:"+Runtime.getRuntime().totalMemory()/(1024*1024));
Log.i("UtilsApplication","getRuntime.freeMemory:"+Runtime.getRuntime().freeMemory()/(1024*1024));
Log.i("UtilsApplication","getRuntime.maxMemory:"+Runtime.getRuntime().maxMemory()/(1024*1024));
5、电池信息
1、Battery Historian 工具查看电池情况
2、adb shell dumpsys batterystats --reset 查看电池
6、app_process原理
在 Android 系统中,zygote 通过 fork()调用一个 app_process 进程作为 App 的载体,我们同样也可以通过 app_process 运行一个普通的 java 程序,这个 java 程序可以像 App 一样通过 binder 跨进程与 system_server 通信,实现并调用一些 Android 系统服务的接口,同时,通过 app_process 启动的程序拥有 shell 等同的权限,这样可以完成一些 app 无权限但是 adb 能够完成的命令