Android启动优化+ANR优化

概述

应用程序的响应是由ActivityManager和WindowManager系统服务监视的。(Activity实现了Window.Callback和KeyEvent.Callback),当主线程对输入事件5s内没有做出响应、BroadcastReceiver的onReceive()方法10s内没有处理完毕或者Service的各个生命周期方法20s内没有处理完毕。

体现

  • 启动速度慢,进入界面卡顿
  • 动画执行不流畅
  • 列表滑动卡顿
  • 不响应用户事件

产生原因及解决方法

  • UI线程进行耗时操作
    避免在主线程进行耗时操作,可以放入子线程进行。合理使用多线程编程。
  • 采用合理的数据结构
  • 数据结构不同,其内存占用也不同
  • 布局嵌套过多
    • 用ViewStub或者merge减少视图层级
    • 延迟加载
    • 问题:ViewStub,merge,include的区别?
      • include:重用布局。
      • merge:减少视图层级。例如:外层是垂直布局,引入一个垂直布局的include,这时这个include的LinearLayout就没意义了,可以使用merge。
      • ViewStub:当你需要时才会加载。例如:进度条,网络请求的状态等可以使用,可以减少内存使用,加快渲染速度。它是一个不可见的,大小为0的view。不支持merge标签。
  • 同一时间动画执行次数过多,CPU或GPU负载过重
  • view的过度绘制,频繁measure,layout
    • 问题:什么是view的过度绘制?
      指的是同一像素被绘制多次,Android手机开发者模式中有Debug GPU overdraw(调试GPU过度绘制)开关。可以检测得到。(有四种颜色:蓝,淡绿,淡红,红)。
    • 优化:
      • ①activity在setContentView时会自动填充一个默认背景,如果不需要这个背景,要取消掉,getWindow.setBackgroundDrawable(null)
      • 减少层级嵌套,如果有多个布局设置了同样的background,可以把无用的去掉
  • 频繁GC
  • Application里初始化太多第三方sdk

怎么查看日志

找到/data/anr/traces.txt文件。真机访问不了,必须通过adb命令行导出来(adb pull)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值