Android应用卡顿

应用卡顿

内存泄露

  1. Generation Heap Memory,三种类型的内存区域,Young Generation,Old Generation,Permanent Generation,如果内存泄露随着时间的推移,会进入Permanent区域,但是内存总量是有限的

频繁GC

  1. onDraw里创建对象,内存颤抖

耗电问题

  1. 没特别重要的信息,不要频繁唤醒用户
  2. 适当的做本地缓存,减少请求网络的次数
  3. 时间较长的任务可以在用户充电和有WiFi的情况下去做

OOM问题

  1. 内存泄露
  2. 大量无用的数据对象,比如接口返回了100项数据内容,只有10项有用到,解析的时候无需解析无用字段
  3. 加载图片,按实践控件大小加载,inSampleSize,编码格式

具体体现

  1. 在主线程做轻微的耗时操作,比如读取数据库,读取SP,解析json,用该用异步加载
  2. layout过于复杂,无法在16ms完成,减少层级,少用RelativeLayout,可以用约束布局替代
  3. 同一时间执行的动画过多,CPU、GPU负载过重
  4. view过度绘制,比如设置不必要的背景,开发者选项show GPU Overdraw应该靠近蓝色区域
  5. GC频繁
  6. 资源加载,预加载方式,splash页面加载好,按需加载时给进度提示
  7. 工作线程优先级设置不对,导致和主线程抢CPU时间,RX有可能导致
  8. 静态变量,持有Activity引用

处理方式

  1. leakcany 分析内存泄露
  2. 不要在主线程做耗时操作
  3. 使用viewstub(某条件加载) 和 merge(include时合并根布局)
  4. 刷新优化,局部刷新
  5. 动画优化可以开启硬件加速,动画做完之后要关闭
  6. 耗电优化定位精度问题,网络先确定是否有网络
  7. 不到不得已,不要使用wrap_content,在测量过程中match_parent和固定宽高度对应EXACTLY ,而wrap_content对应AT_MOST,这两者对比AT_MOST耗时较多

  转载请注明: And Lau Android应用卡顿

 上一篇
Android组件通讯技术选型 Android组件通讯技术选型
EventBus强大,如果项目里比较多杂的事件,就是发送事件和订阅事件,比较直观,线程切换也便捷,包体比较大,简洁 解偶 RxBus 就是RxJava版的EventBus,也是订阅和发送事件,包体比较小,一般引入RxJava,也有Rxja
2019-02-13
下一篇 
Https传输过程 Https传输过程
第一次HTTP请求 客户端向服务器发起HTTPS请求,连接到服务器的443端口 服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。 服务器将自己的公钥发送给客户端 客户端
2018-06-21
  目录