博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分享7年Android经验:真的有弄懂过性能优化吗?
阅读量:2262 次
发布时间:2019-05-09

本文共 2860 字,大约阅读时间需要 9 分钟。

我们常说的性能通常包括如下几个方面

1.应用的启动速度

这个无论是基于用户体验的角度还是基于产品 宣传的角度这个越来越受到主流厂商的重视:

a.基于用户体验的角度,这一点不难理解,随着手机硬件的不断升级,用户也是越来越没耐性,他们不想等,也就说当用户点击某个应用,就希望应用的操作界面立马呈现出来!

b.基于产品宣传的角度:由于应用的启动速度是能够非常直观呈现,因此常常被很多测评网站拿来对比!

2. 开/关机速度(包括恢复出厂设置速度)

3. 流畅度:

流畅度分普通场景的流畅度包括:滑动的流畅度、页面切换的流畅度;

游戏场景的流畅度:触屏是否跟手、FPS是否稳定、网络是否稳定;由于目前手机性能越来越好,同时手机游戏越来越火,特别是王者荣耀、吃鸡类游戏的持续火爆。使得各个厂商把游戏的流畅度提到战略高度,甚至出了的专门的游戏手机如:NUBIA的红魔手机,小米的黑鲨手机,有些厂商选择与游戏厂商合作,来对游戏进行深度优化如:oppo与王者荣耀团队的多核多线程优化,还有如vivo出了王者荣耀周年定制手机等等。

4.跑分:

跑分各人觉得产品宣传的角度远远大于用户体验。

但是由于线上这种“不服,就跑个分”这种氛围,使得各个厂商也必须对跑分进行所谓的优化。当然对于用户而言,跑分确实能反应出整个机器的硬件水平,但是如果跑分不是基于用户的基础使用体验为目的的话,个人觉得有一点"欺骗用户"的感觉,这里所说的基础体验就是指,厂商所谓的优化,不是针对跑分软件去进行优化,跑分高或者低只是一个水到渠成的结果,比如,我司手机滑动优化做得非常好,非常流畅,那么自然跑分软件中关于滑动流畅性这一块的分自然就高。预期对立的就是:

 

if(packagename.equals("antutu")){       cpu最大频率跑}

从技术层面看看这几个维度

应用启动速度:

应用启动速度对用户而言:是指从点击到第一个界面加载完毕的时间;

但是对于研发而言这里应该可以分为如下几个阶段:

a.点击即框架收到触屏的中断时间到launcher接收到input的事件;

b.launcher响应点击事件到应用绘制完第一帧;

c.从第一帧到页面加载完毕;a和b阶段是真正的系统的反应的时间,c阶段主要是动画的时间,不同厂商可能根据自己需求定义不同的动画时长。因此在对于应用启动的速度,尤其是热启动的时候一定要注意应用的启动动画时长。

分析应用启动常见思路如下:

前置条件(相同或者相近平台,这个是后面所有主题的前置条件):

首先要保证测试样机和竞品机器的安装的第三方应用是同一个版本,这个为排除不同版本的应用本身导致的启动速度上面差异。
应用最好都是重新安装的,因为对于第三方应用而言,非预制的应用,安装的时候android系统默认的compiler mode是android-N之前inerprter-only,android O开始就quicken。但是安装完一段时间后,系统会把它优化成speed-profile.这俩种模式对应用的启动速度影响比较大。

问题分析思路:

冷启动看看是否是真正的冷启动,因为有可能厂商为了某些应用的启动速度更快,而让这个应用的进程长驻。也有肯能是温启动,即:当你强行停止,应用进程又会立马起来。

热启动主要看动画时长是否一样
看看cpu/gpu的boost策略是否相同,如:启动过程中核心数、boost的所用的freq的大小,boost的时长、sched_boost的多0,1,2,还是3.
如果以上条件都一样,就抓systrace,看具体慢在哪一段

开/关机:开机可以看如下log

 

1PBL/SBL/HYP/ LK boot loaderBootloader time2Kernel boot up +Initialize native daemonsboot_progress_start3Zygote class preloadingboot_progress_preload_startboot_progress_preload_startboot_progress_preload_endboot_progress_preload_endboot_progress_system_run4Package scanningboot_progress_pms_startboot_progress_pms_system_scan_startboot_progress_pms_data_scan_startboot_progress_pms_scan_endboot_progress_pms_ready5Service initializationboot_progress_ams_ready6UI/Apps startboot_progress_enable_screenTotal boot up time= Bootloader time (1) + Time from boot_progress_enable_screen

关机:可以通过 logcat |grep -i "shutdown",来看关机耗时。

游戏:游戏分俩种情况

游戏帧率稳定:但是就是感觉卡顿,或者是感觉任务移动困难,这个很有可能和触屏相关。这个时候最好能够用userdug的版本,进一步分析。一般有如下几种情况:

1.固件没有上报

2.固件上报了,但是被驱动过滤掉了

3.固件驱动都上报了,这个时候就要在框架进一步分析了

游戏帧率不稳定,这个又分下面俩种情况

1.游戏的某个场景,帧率一直不稳定,这个很有可能和cpu策略相关。

2.掉帧的这个场景,一开始稳定,但是发热后就不稳定了,这个应该就和温控策略相关,应该就是温控关核限频率导致的。

普通场景的流畅度:

这个就要对比分最好看看竞品是否卡顿,如果竞品流畅很多,就可以抓个systrace看看竞品机器的cpu策略是什么样的,同时检查oversrcoller boost,scroller boost是否生效。

如果遇到系统整体卡顿情况,分析思路如下:

1.检查是否处于低电状态,低电状况会触发BCL,如高通平台一般是10%,这个时候就会关闭所有大核,或者打核不跑任务。

2.检查是否发热,导致关核

3.用TOP命令看一下,是否有某些应用在疯狂的暂用cpu资源。

如果遇到插充电器(电脑)不卡,不插充电器卡的情况,可以尝试抓取离线的systrace来分析(高通平台):

1.使用手机连接上wifi

2.确保手机和PC网络可以互通(可以ping相互的ip地址)

3.确保手机usb调试打开,使用usb连接手机,然后执行命令:adb tcpip 5555

4.断开usb连接

5.输入命令:adb connect 手机ip地址(如 adb connect 192.168.1.111)

以上为部份分享,若是有兴趣的欢迎关注,后期有任何分享欢迎讨论,有任何不对的地方也欢迎指点。

转载地址:http://ybfcb.baihongyu.com/

你可能感兴趣的文章
关于系统弹出错误:429 , ActiveX 部件不能创建对象 的解决方法
查看>>
Chrome 提标 您的浏览器限制了第三方Cookie...解决方法
查看>>
对于在git上面拉代码报“error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054“解决方法
查看>>
Pyinstaller 打包exe 报错 “failed to execute script XXX“的一种解决方案
查看>>
使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题
查看>>
解决pycharm新建项目后按钮灰色问题
查看>>
spring mvc 异常统一处理方式
查看>>
ubuntu sudo apt-get update 失败 解决方法
查看>>
xxx is not in the sudoers file.This incident will be reported.的解决方法
查看>>
Host ‘XXX‘ is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号
查看>>
MySQL Replication 主从复制全方位解决方案
查看>>
解决微信二次分享失败--后面被加上from=singlemessage&isappinstalled=0的解决方案
查看>>
mysql启动错误1067进程意外终止的解决方法
查看>>
finished with exit code -1073740791 (0xC0000409)解决方案
查看>>
解决teamviewer试用期到期的方法
查看>>
解决PKIX:unable to find valid certification path to requested target 的问题
查看>>
【vue】使用localStorage解决vuex在页面刷新后数据被清除的问题
查看>>
NullPointerException异常的原因及java异常??
查看>>
SQLyog连接MySQL时出现的2058错误解决方法
查看>>
解决端口被占用问题
查看>>