Activity卡顿、变慢的原因

简介: Activity卡顿、变慢的原因

为准备面试,将最近所复习的内容以博客的形式保存起来,方便以后的查询


从网上查询了一些Activity卡顿原因,然后结合个人看法,总结如下:


(1)内存泄漏导致内存占用较高,导致JVM频繁触发GC。解决办法:尽可能的减少生命周期长的对象引用生命周期短的对象。导致内存泄漏的原因有一下几个


  A)查询数据库后没有关闭游标cursor,各种资源文件没有close。


  B)构造Adapter时,没有使用convertView重用


  C)Bitmap对象不再使用时没有调用recycle释放内存


  D)静态变量引用对象,Application引用对象。


  E)Handler造成内存泄漏。new Handler(){};创建Handler的方法会导致Handler对外部类Activity一个引用。而Message会存有对Handler引用,因此,如果Activity退出时这个Message还未处理,就会一直有Activity的引用。解决方法:创建一个Handler子类,而不是直接通过new Handler(){};的方式,在Handler里保持一个对Activity的弱引用。在handleMessage时首先判断引用的Activity不为空。然后具体针对Activity的操作可以通过这个引用的Activity做相应的业务处理。

 

(2)加载大数据,占用太多内存,同样导致JVM频繁GC。解决办法:主要是Bitmap占用太多内存。可以通过根据需要显示的Bitmap宽高设定采样率来压缩图片。另外,通过采用LRUCache方法避免。如果是其他的大数据比如3D模型数据,可以通过使用Native空间,使用ByteBuffer.allocate(size);


(3)UI线程做耗时任务(数据库操作,数据计算等),1秒绘制60帧才不会卡顿,即16.6ms要刷新一次才不会卡顿。解决方法:另起线程做耗时任务。


(4)UI OverDraw。


(5)在包含ImageView的ListView中,等滑动停止后加载图片。



相关文章
|
2月前
|
Java 测试技术 Android开发
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
169 4
Android性能测试——发现和定位内存泄露和卡顿
|
1月前
|
消息中间件 缓存 网络协议
系统卡顿分析
系统卡顿分析
|
6月前
|
缓存
fragment卡顿 的处理
fragment卡顿 的处理
49 2
|
XML 存储 缓存
RecyclerView 性能优化 | 把加载表项耗时减半 (一)
RecyclerView 性能优化 | 把加载表项耗时减半 (一)
11017 0
|
XML 存储 缓存
RecyclerView 性能优化 | 把加载表项耗时减半 (二)
RecyclerView 性能优化 | 把加载表项耗时减半 (二)
227 0
|
XML 存储 缓存
RecyclerView 性能优化 | 把加载表项耗时减半 (三)(下)
RecyclerView 性能优化 | 把加载表项耗时减半 (三)
127 0
|
XML 前端开发 数据格式
RecyclerView 性能优化 | 把加载表项耗时减半 (三)
RecyclerView 性能优化 | 把加载表项耗时减半 (三)
159 0
|
消息中间件 Android开发
读源码长知识 | Android卡顿真的是因为”掉帧“?
掉帧是因为生产帧速度跟不上消费帧速度。Choreographer 用于同步生产和消费帧的速度。以读源码方式还原掉帧时软件层面发生的事情。
269 0
|
监控 Java Shell
Android卡顿优化 | 卡顿单点问题监测方案
Android卡顿优化 | 卡顿单点问题监测方案
|
Web App开发 存储 缓存
一文带你了解如何排查内存泄漏导致的页面卡顿现象(上)
不知道在座的各位有没有被问到过这样一个问题:如果页面卡顿,你觉得可能是什么原因造成的?有什么办法锁定原因并解决吗?
854 0
一文带你了解如何排查内存泄漏导致的页面卡顿现象(上)