为什么app卡顿?
来源:互联网 发布:看耽美小说软件 编辑:程序博客网 时间:2024/04/28 23:53
App为什么这么卡的原因了???
了解Android绘制机制后,我们可以知道造成应用卡顿的根源就在于16ms内不能完成绘制渲染合成过程。因为Android平台的硬件刷新率为60HZ,大概就是16ms刷新一次。如果我们没有在16ms内完成绘制渲染合成过程,就会使屏幕重复的显示上一帧的内容,即造成了卡顿。因此, 在这16ms内,需要完成视图树的所有测量、布局、绘制渲染及合成。而我们的优化工作主要就是针对这个过程的。
UI线程被阻塞
如果UI线程受到阻塞,显而易见的是,我们的Traversal过程也将受阻塞!画面卡顿是妥妥的发生啊。这就是为什么大家一直在强调不要在UI线程做耗时操作的原因。通常UI线程的阻塞和以下原因脱不了关系。
- 在UI线程中进行IO读写数据的操作。这是一个很费时的过程好吗?千万别这么干。如果不想获得一个卡到爆的App的话,把IO操作统统放到子线程中去。
- 在UI线程中进行复杂的运算操作。运算本身是一个耗时的操作,当然简单的运算几乎瞬间完成,所以不会让你感受到它在耗时。但是对于十分复杂的运算,对时间的消耗是十分辣眼睛的!如果不想获得一个卡到爆的App的话,把复杂的运算操作放到子线程中去。
- 在UI线程中进行复杂的数据处理。我说的是比如数据的加密、解密、编码等等。这些操作都需要进行复杂运算,特别是在数据比较复杂的时候。如果不想获得一个卡到爆的App的话,把复杂数据的处理工作放到子线程中去。
- 频繁的发生GC,导致UI线程被频繁中断。在Java中,发生GC(垃圾回收)意味着Stop-The-World,就是说其它线程全部会被暂停啊。好可怕!正常的GC导致偶然的画面卡顿是可以接受的,但是频繁发生就让人很蛋疼了!频繁GC的罪魁祸首是内存抖动。简单的说就是在短时间内频繁的创建大量对象,导致达到GC的阀值,然后GC就发生了。如果不想获得一个卡到爆的App的话,把内存的管理做好,即使这是Java。
- 故意阻塞UI线程。比如sleep()一下
参考:http://www.jianshu.com/p/df4d5ec779c8
0 0
- 为什么app卡顿?
- app的卡顿
- Android app 卡顿分析
- 安卓 & 卡顿 & APP
- 为什么会有屏幕卡顿
- Android为什么卡顿系统原理分析
- APP发生卡顿,以及优化思路
- Android App卡顿问题分析
- Android APP严重卡顿BUG
- 详解Android App卡顿优化问题
- app崩溃和卡顿总结
- Android App优化之消除卡顿
- Android App优化之消除卡顿
- Android App 优化之消除卡顿
- Ijkplayer直播App卡顿问题分析
- android中app消除/降低卡顿
- Android为什么卡顿?为什么用起来不如iOS流畅
- ios点击app启动延迟,app图标卡顿
- docker 安装 zabbix
- Catch That Cow POJ 3278 BFS 广度优先搜索
- iOS逆向 ipa包重签名
- c#编程之文件操作
- 【微机实验系列】标准输入输出系统
- 为什么app卡顿?
- Subtree 解题报告
- Android状态栏和导航栏透明和沉浸式模式
- ActiveMQ学习笔记目的地特性
- TreeSet类练习
- 顺序队列
- c++实现简单选择排序和堆排序
- 快速幂取模问题
- java 线程中start方法与run方法的区别详细介绍