Android TextView setText卡顿问题
TextView 是经常使用控件之中的一个,最经常使用的方法是setText() 。
可是 我们在显示大量的文本的时候,使用setText还是会有一些性能的问题。
这篇文章 关于TextView的setText 的性能问题 和 如何优化。 先来介绍些基本知识
Android中的TextView是整个framework中最复杂的控件之中的一个,负责Android中显示文本的大部分工作,framwork中的很多控件也直接或者间接的继承于TextView。比如Button,EditText等。其内部实现也相当复杂。
TextView中很多操作都很繁重。比如setText操作,须要设置SpanWatcher,或者须要重现创建一个SpannableString,还须要依据情况又一次创建TextLayout,这些操作加起来之后令一次setText操作很耗时。
尤其是显示大量的文本
以及 emoji 表情的时候,会造成严重的性能问题。
之前做了一个类似朋友圈的功能。经过測试 有大量的emoji表情的时候 滑动的时候 会有 明显的卡顿感。
光一个item 就可能要载入30-50ms之长。
那么 一般对Android 小有研究的人都知道 渲染超过16ms 就会卡顿。
那么 为什么卡顿呢? 原因是丢帧造成的。
首先 16ms是怎么来的
16 = 1000 / 60; 这个公式 1000ms = 1秒钟 / 60帧。 也就是 在1秒钟内 显示60帧 人在操作的时候 才不会感觉卡顿。 那么假设超过了16ms 后面的帧 就来不及渲染。 那么就会把后面的丢掉 这是造成卡顿的原因。
TextView渲染基本原理
1.BoringLayout
,SpannableString和SpanWatcher这些就不在这里解释了,大家可自行搜索 )
StaticLayot 可在 线程中使用。比較特殊, 为什么能在线程使用 详细没研究过....
因为StaticLayout可在
项目内容主要是 对StaticLayot
的预渲染。
Android TextView setText卡顿问题的更多相关文章
- android TextView SetText卡顿原因
[android TextView SetText卡顿原因] 不要用wrap_content即可. 参考:http://blog.csdn.net/self_study/article/details ...
- android textview settext卡顿深层次原因
最近在公司项目里面发现listview里面的textview在调用settext函数的时候非常耗时,当时都有点不敢相信,这是因为如果你把textview设置成wrap_content,则每次调用set ...
- Android 界面滑动卡顿分析与解决方案(入门)
Android 界面滑动卡顿分析与解决方案(入门) 导致Android界面滑动卡顿主要有两个原因: 1.UI线程(main)有耗时操作 2.视图渲染时间过长,导致卡顿 目前只讲第1点,第二点相对比较复 ...
- Android中app卡顿原因分析示例
在知乎回答了一个“为什么微博的app在iPhone比Android上流畅”的问题.后面部分是一个典型的动画卡顿的性能分析过程,因此帖在这里.有编程问题可以在这里交流.知乎链接. =========== ...
- 【Android端ANR卡顿检测】BlockCanary检测
一.什么是BlockCanary? 检测主线程卡顿的一个开源工具,基本展现模式等都和LeakCanary很像 二.BlockCanary的工作原理是什么? 工作原理所涉及到的底层的内容一定要理解清楚 ...
- Android App解决卡顿慢之内存抖动及内存泄漏(发现和定位)
内存抖动是指在短时间内有大量的对象被创建或者被回收的现象,内存抖动出现原因主要是频繁(很重要)在循环里创建对象(导致大量对象在短时间内被创建,由于新对象是要占用内存空间的而且是频繁,如果一次或者两次在 ...
- android中app卡顿优化问题
所谓app卡顿原因就是在运行时出现了丢帧,还可能是UI线程被阻塞.首先来一下丢帧现象,android每16ms会对界面进行一次渲染,如果app的绘制.计算等超过了16ms那么只能等下一个16ms才能 ...
- Android性能优化----卡顿优化
前言 无论是启动,内存,布局等等这些优化,最终的目的就是为了应用不卡顿.应用的体验性好坏,最直观的表现就是应用的流畅程度,用户不知道什么启动优化,内存不足,等等,应用卡顿,那么这个应用就不行,被卸载的 ...
- android中fragment卡顿的原因
首页的ViewPager有十几个Fragment,在快速切换的时候,容易产生卡顿现象. 二.分析当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快 ...
随机推荐
- 【eclipse】导入/导出开发环境(包括编辑器字体颜色大小等)
Eclipse的 File -> Export(导出),在窗口中展开 General(常规) -> Perferences(首选项)-->Export all(全部导出)然后点击 N ...
- shell 执行提示No such file or directory
问题描述: 项目开发过程中ansible执行脚本失败,单独运行shell脚本提示:No such file or directory,脚本结构执行脚本a 调用另一脚本b, 但查看b脚本路径正确不存在找 ...
- 《手把手教你学C语言》学习笔记(9)--- 程序的选择控制
C语言是面向过程编程语言的主要代表,其特征就是严格控制程序的执行语句顺序,因此,C程序的主要结构控制就是顺序控制,以main函数为入口函数,根据控制,一条一条地执行语句.由于实际需求是很复杂的,只用顺 ...
- C# 数组与 list 互相转换案例
在项目中用到了 随手分享下 记得点赞呦! 1,从System.String[]转到List<System.String>System.String[] str={"str&quo ...
- 腾讯云使用liveRoom开启直播时,报“房间已存在”错误?
利用腾讯云roomService服务,移动直播,创建房间api,CreateRoom时有时报“房间已存在”错误. 分析流程发现,CreateRoom会传入roomId到roomService后台,后台 ...
- Codeforces Round #454 C. Shockers【模拟/hash】
C. Shockers time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- Codeforces Gym 101194C Mr. Panda and Strips(2016 EC-Final,区间DP预处理 + 枚举剪枝)
题目链接 2016 EC-Final 题意 现在要找到数列中连续两个子序列(没有公共部分).要求这两个子序列本身内部没有重复出现的数. 求这两个子序列的长度的和的最大值. 首先预处理一下.令$ ...
- 洛谷——P1690 贪婪的Copy
P1690 贪婪的Copy 题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地.卢牛告诉了Copy这里共有个宝藏,分别放在第Pi个(1&l ...
- Java NIO中的Channel接口
1. Channel 通道,可以将指定文件的部分或全部直接映射成Buffer. 不能直接读写Channel中的数据,Channel只能与ByteBuffer交互. 读数据时,把Channel中的数据 ...
- the Red Sun
题面 Description 给定一张 N 个点的图, 点的标号为 1 到 n . 我们进行 M 次连边, 每次连边可以描述为 a b c d w : for i = a to b do for j ...