面试复习题--性能检测原理

14 篇文章 0 订阅
5 篇文章 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 能够完成的命令

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值