深入分析Android“卡顿掉帧”问题

前言

深入分析Android“卡顿掉帧”问题

文章插图
 
全球手机市场中 , Android/ target=_blank class=infotextkey>安卓和IOS一直占着主流市场 , iphone手机给人的感觉就是流畅 , 而安卓手机却一直是卡顿的代名词
其实 , 安卓机刚上手时还是速度飞快的 , 并且基于它开放性的原则 , 受到多数用户的喜爱 , 但通病是:运行一段时间后 , 反应变慢、容易卡顿 , 这也是iOS用户不肯换安卓最主要的原因
Android出现使用不流畅 , 卡顿的主要原因
深入分析Android“卡顿掉帧”问题

文章插图
 
CPU使用率过高● 手机固件有缺陷 , 导致CPU使用率始终过高 , 这时您刷一个稳定点的ROM就好了
● 开启了过多的程序;这时您可以使用进程管理程序清理一下后台进程
● 某个程序由于设计不当或者不兼容导致占用大量CPU资源 , 这时您可以使用手机安全卫士体检里的运行监测(只勾选这个)查看当前所有正在运行程序的CPU占用 , 找到消耗资源特别多的 , 结束或者卸载它
● 您执行的某一个操作可能导致CPU过高(有时候也可能是查看CPU占用这个操作)
● CPU使用率查看软件不准确,这时您可以用多个软件查看
系统内存使用率过高系统内存分为物理内存和虚拟内存
● 物理内存就是系统硬件提供的内存大小 , 是真正的内存;在linux下还有一个虚拟内存的概念 , 虚拟内存就是为了满足物理内存的不足而提出的策略 , 它是利用磁盘空间虚拟出的一块逻辑内存 , 用作虚拟内存的磁盘空间被称为 交换空间(Swap Space)
● linux的内存管理采取的是分页存取机制 , 为了保证物理内存能得到充分的利用 , 内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中 , 而将经常使用的信息保留到物理内存 。而进行这种交换所遵循的依据是“LRU”算法(Least Recently Used , 最近最少使用算法)
● 无论是使用桌面操作系统还是移动操作系统 , 很多人都喜欢随时关注内存 , 一旦发现内存使用率过高就难受 , 忍不住的要杀进程以释放内存 。这种习惯很大程度上都是源自windows系统 , 当然这在Windows下也确实没错 。然而很多人在使用Linux系统时仍然有这个习惯 , 甚至到了Android系统下 , 也改不掉(尤其是Android手机刚出现的几年) , Clean Master等各种清理软件铺天盖地 。毫不客气的说 , Windows毒害了不少人!当然 , 这也不能怪Windows , 毕竟Windows的普及率太高了 , 而大部分普通用户(甚至一些计算机相关人员)又不了解Windows和Linux在内存管理方面的差别
屏幕刷新丢帧刷新频率
● 屏幕的刷新频率(Refresh Rate) , 就是一秒内屏幕刷新的次数
● 我们知道 , 在某一个时刻 , 将图像数据涂到屏幕上我们就能直观地看到一幅静态的画面 , 但这显然不能满足用户需求 。我们需要看到的是屏幕上的动画——即不断切换的连续衔接的画面 。在动画术语中 , 每一张这样的衔接画面被称作帧 。也就是说 , 为了看到动画 , 我们需要以恒定的速度取到连续的帧 , 并将帧涂到屏幕上
如上 , 要显示屏幕动画 , 我们要设置两个时机
● 时机一:生成帧 , 产生了新的画面(帧) , 将其填充到 FrameBuffer 中 , 这个过程由 CPU(计算绘制需求)和 GPU(完成数据绘制)完成
● 时机二:显示帧 , 显示屏显示完一帧图像之后 , 等待一个固定的间隔后 , 从 FrameBuffer 中取下一帧图像并显示 , 这个过程由 GPU 完成
对于设备而言 , 其屏幕的刷新频率 就相当于显示帧的时机和速度 , 可以看做是额定不变的(而生成帧速度对应我们通常说的帧率)
刷新频率这个参数是手机出厂就决定的 , 取决于硬件的固定参数;目前大多数设备的刷新率是 60Hz , 也就是一秒刷新60次 , 所以每次屏幕刷新的过程占用时间就是16ms(1000/60)左右 , 这个是固定参数 , 运行过程中 , 不会发生改变


推荐阅读