android高效 android性能

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


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(后面博客会讲详细分析案例)

1
PBL/SBL/HYP/ LK boot loader
Bootloader time
2
Kernel boot up +
Initialize native daemons
boot_progress_start
3
Zygote class preloading
boot_progress_preload_start
boot_progress_preload_start
boot_progress_preload_end
boot_progress_preload_end
boot_progress_system_run
4
Package scanning
boot_progress_pms_start
boot_progress_pms_system_scan_start
boot_progress_pms_data_scan_start
boot_progress_pms_scan_end
boot_progress_pms_ready
5
Service initialization
boot_progress_ams_ready
6
UI/Apps start
boot_progress_enable_screen
Total boot up time
= Bootloader time (1) + Time from boot_progress_enable_screen

关机:可以通过 logcat |grep -i “shutdown”,来看关机耗时(后面博客会讲详细分分析案例)

游戏:游戏分俩种情况

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

  • 固件没有上报
  • 固件上报了,但是被驱动过滤掉了
  • 固件驱动都上报了,这个时候就要在框架进一步分析了

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

  • 游戏的某个场景,帧率一直不稳定,这个很有可能和cpu策略相关。
  • 掉帧的这个场景,一开始稳定,但是发热后就不稳定了,这个应该就和温控策略相关,应该就是温控关核限频率导致的。

普通场景的流畅度:

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

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

  • 检查是否处于低电状态,低电状况会触发BCL,如高通平台一般是10%,这个时候就会关闭所有大核,或者打核不跑任务。
  • 检查是否发热,导致关核
  • 用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)

学习完本文有没有收获到一点什么呢?学无止境,学习如逆水行舟,不进则退,本文除了以上内容,还准备了许多Android进阶练习的相关资料,为努力奋斗的你无偿献上,希望能帮到你!

扫码领取!Android开发必备进阶资料

猜你喜欢

转载自blog.csdn.net/m0_56255097/article/details/134548099
今日推荐