Activity卡顿、变慢的原因
2016-05-13 13:26
211 查看
为准备面试,将最近所复习的内容以博客的形式保存起来,方便以后的查询
从网上查询了一些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中,等滑动停止后加载图片。
从网上查询了一些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中,等滑动停止后加载图片。
相关文章推荐
- bzoj 3820: 虫逢 hash
- Map的实例
- HDU 2098 分拆素数和 (素数基础)
- 函数对象
- tmpfs(/dev/shm)
- Eclipse错误: 找不到或无法加载主类或项目无法编译10种解决大法!
- 日常开发——Android网络请求openConnection()源码分析
- Sublime Text 关闭自动更新提示
- 常用第三方
- 最全面的65条最常用正则表达式
- 求斐波那契数列的第n项
- Z字形编排问题
- 目标检测(1)
- abort()函数
- windows server 2003 系统安装蓝屏问题
- dpkg的用法
- 工作中最全最常用的正则表达式
- Ping++SDK接入
- [绍棠] iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) 以及 iOS App与iTunes文件传输的方法和对iOS App文件结构的说明
- 转 安卓控件属性大全