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中,等滑动停止后加载图片。



相关文章
|
5月前
|
JavaScript API 容器
Vue 3 中的 nextTick 使用详解与实战案例
Vue 3 中的 nextTick 使用详解与实战案例 在 Vue 3 的日常开发中,我们经常需要在数据变化后等待 DOM 更新完成再执行某些操作。此时,nextTick 就成了一个不可或缺的工具。本文将介绍 nextTick 的基本用法,并通过三个实战案例,展示它在表单验证、弹窗动画、自动聚焦等场景中的实际应用。
446 17
|
JSON 前端开发 Go
前端文件下载的方式
【10月更文挑战第5天】
322 58
|
12月前
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
2002 0
解决You need to use a Theme.AppCompat theme (or descendant) with this activity
解决You need to use a Theme.AppCompat theme (or descendant) with this activity
196 4
|
JavaScript Java
EL表达式
这篇文章介绍了EL表达式的基本概念、语法、保留关键字、运算符及其优先级,并详细解释了如何在EL中访问数据、进行算术运算、判断对象是否为空、逻辑关系运算和条件运算。
EL表达式
|
12月前
|
移动开发 前端开发 JavaScript
页面手写签名实现:利用Canvas技术将签名保存为图片
页面手写签名实现:利用Canvas技术将签名保存为图片
438 0
|
数据采集 算法 关系型数据库
在 MySQL 中使用 REVERSE
【8月更文挑战第6天】
470 0
|
Android开发 UED 开发者
Android经典实战之WindowManager和创建系统悬浮窗
本文详细介绍了Android系统服务`WindowManager`,包括其主要功能和工作原理,并提供了创建系统悬浮窗的完整步骤。通过示例代码,展示了如何添加权限、请求权限、实现悬浮窗口及最佳实践,帮助开发者轻松掌握悬浮窗开发技巧。
1909 1
|
消息中间件 存储 Java
场景题:如何提升Kafka效率?
场景题:如何提升Kafka效率?
200 0
场景题:如何提升Kafka效率?
|
前端开发
前端:下载文件(多种方法)
前端:下载文件(多种方法)
1201 0