面试复习题--性能检测原理
创始人
2024-05-24 03:24:29
0

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 能够完成的命令

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...