大量文本刷新时,性能出现瓶颈,譬如:直播中的聊天
绘制 和 measure 时间比较长
优化
1.节省 measure 时间,Android有很多用于文字展示的控件,但实际上,他们都用text.Layout进行渲染。例如,TextView会将String转化为一个text.Layout对象,并通过canvas API将它绘制到屏幕上。
由于text.Layout需要在构造函数中测量文本的高度,因此它的创建效率不高。缓存text.Layout和复用text.Layout实例可以节省这部分时间2.在可以设置text.Layout缓存后,我们的到来常数级的测量(measure)和绑定(binding)时间。但是初次绘制的时间仍然很长。50ms的绘制时间可能会导致明显的卡顿。
这50ms中的大部分被用于测量文本高度以及产生文字符号。这些都是CPU操作。为了提升文本渲染速度,Android在ICS中引入了TextLayoutCache用于缓存这些中间结果。TextLayoutCache是一个LRU缓存,缓存的key是文本。如果查询缓存时命中,文本的绘制速度会有很大提升3.强制使用Staticlayout
1234567891011TextView包含了3种布局:a. BoringLayout (单行纯文字文本)b. Staticlayout (多行复杂文本)c. DynamicLayout (多行可编辑复杂文本)强制使用Staticlayout4 StaticLayout的用途a.文中高频度大量textview刷新优化。b.一个textview显示大量的文本,比如一些阅读app。c. 在控件上画文本,比如一个ImageView中心画文本。d. 一些排版效果,比如多行文本文字居中对齐等。
参考