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会加载布局并显示内容,如果用户这时快 ...
随机推荐
- 利用linux信号机制调试段错误(Segment fault)【转】
转自:http://blog.csdn.net/ab198604/article/details/6164517 版权声明:本文为博主原创文章,未经博主允许不得转载. 在实际开发过程中,大家可能会遇到 ...
- linux多线程学习笔记五--线程安全【转】
转自:http://blog.csdn.net/kkxgx/article/details/7506085 版权声明:本文为博主原创文章,未经博主允许不得转载. 一,线程安全基础 一个函数被称为线程安 ...
- Bluedroid之GKI
1. 概述 GKI以库libbt-brcm_gki.a的形式提供给Bluedroid使用 该层是一个适配层,适配了OS相关的进程.内存相关的管理,还可以用于线程间传递消息 主要通过变量gki_cb(结 ...
- Windows开发
1. 介绍 这里简单介绍了Windows应用程序开发的基础知识 2. 基础 Windows下的应用程序有控制台程序和Win32窗口程序,这里讲的是Win32窗口程序 Windows提供了相关静态库(L ...
- Codeforces Round #315 (Div. 2)【贪心/重排去掉大于n的元素和替换重复的元素】
B. Inventory time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Break Number --AtCoder
题目描述 Takahashi loves numbers divisible by 2.You are given a positive integer N. Among the integers b ...
- Java基础教程---JDK的安装和环境变量的配置
一.Java的安装和环境变量配置 1.Java的安装: 第一步,从Oracle官网下载安装包,当然也可以从其他安全可靠的地方下载(PS:根据不同电脑系统下载相应的安装包,注意电脑的位数.如x64,x3 ...
- Qt编程简介与基本知识
1. 什么是Qt? Qt是一个基于C++的跨平台应用程序和UI开发框架.它包含一个类库,和用于跨平台开发及国际化的工具. 由挪威Trolltech公司开发,后被Nokia收购,目前被Digia公司收购 ...
- NVIDIA® Quadro® 四路缓冲 3D立体方案
http://www.nvidia.cn/object/quadro_pro_graphics_boards_cn.html NVIDIA® Quadro® 专业显卡让地球学家以及时装设计师等许多专业 ...
- NV 3D投影方案 【转】
http://tu.pcpop.com/all-677013.htm 1/8 NVIDIA 3D方案涉及图形处理器(GPU).信号发射器.快门式3D眼镜.3D播放软件以及经过NVIDIA认证的显示器. ...