欢迎访问[Android日记][1],如有转载请注明Android日记 http://androiddiary.site
2017.3.12 周日 晴 北京
写日记
记录读书笔记
卡顿
Android应用启动慢,使用时经常卡顿,是非常影响用户体验的,应该尽量避免出现。卡顿的场景有很多,按场景可以分成4类:UI绘制、应用启动、页面跳转、事件响应。在这四种场景下又有多个小分类,基本上覆盖了卡顿的各个场景。
- UI:绘制、刷新
- 启动:安装启动、冷启动、热气的
- 跳转:页面切换、前后台切换
- 响应:按键、系统事件、滑动
这4种卡顿场景的根本原因又可以分成两大类。
- 界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在UI和启动后的初始界面以及跳转到页面的绘制上。
- 数据处理:导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据处理在UI线程(这种应该避免),二是数据处理占用CPU高,导致主线程拿不到时间片,三是内存增加导致GC频繁,从而引起卡顿。
引起卡顿的原因有很多,但不管怎么样的原因和场景,最终都是通过设备屏幕上的显示来到达用户,归根到底就是显示有问题,所以,要解决卡顿,就要先了解Android系统的显示原理。
显示原理
Android的显示过程可以简单概括为:Android应用程序发起绘制任务经过测量、布局、绘制后的surface缓存数据,通过SurfaceFlinger把数据渲染到显示屏幕上,通过Android的刷新机制来刷新数据。也就是说应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要绘制的数据传递到系统层服务,系统层中的SurfaceFlinger服务通过刷新机制把数据更新到屏幕。
Android的图形显示系统采用的是Client/Server架构。SurfaceFlinger(Server)由C++代码编写。Client端代码分为两部分,一部分是由Java提供给应用使用的API,另一部分则是由C++写成的底层具体实现。