android性能优化纲略

启动优化

主题过度优化

从UI视觉上优化冷启动切换体验;

Application初始化优化

都是为了加速主线程:通常包括:
1. 布局初始化
2. 阻塞主线程的耗时操作,I/O,网络
3. Bitmap、矢量图等加载
组织好application里面多组件的初始化,能延迟的放到子线程。编排好初始化顺序。

UI渲染优化

工具:systrace | layoutInspector|hierarchy view
measure, layout, draw每个阶段代码重复运行,耗时操作;
减少层级;约束布局;
无用背景移除,window background null;
背景分段给到子控件上,父控件不设置;
滑动帧率检测;
ViewStub;
动态addView

内存抖动

短时间大量对象分配,又快速释放内存。一般是循环体内创建对象。

主要是onDraw里面重复创建。对象池等解决方案。

工具:android profiler。

crash优化

崩溃率指标:

接入工具库:bugly;阿里,网易等也有工具监控。或者公司内自己开发的工具。

崩溃类型:

  1. java层

    代码逻辑上的exception;

    low memory killer杀掉;

    anr崩溃;

  2. native层

日志分析

java: Fatal, Exception, System.err, event log

jni: DEBUG: backtrace, signal, addr, SIGSEGV, SIGABRT,

​ addr2line, so的符号表

内存优化

工具:profiler,MAT,LeakCannary

LeakCannary原理大致是通过weakReference和new WeakReference第二个参数的gc回调

内存模型:(方法区[运行时常量池]、堆)、(程序计数器、本地方法栈、虚拟机栈)

对象存活:

​ 引用计数;

​ 可达性分析,gc root。

垃圾回收算法:

  • 标记清除算法:简单粗暴。标记后,清理;

  • 复制算法:分半,来回复制;

  • 标记整理:GC较为频繁。内存移动范围大。

  • 分带收集算法:8:1:1分配内存空间,新生态容易死,复制一下就解决了,而且比较少量,内存热区;

    ​ 长久不能回收的往老年代放。

内存泄漏

工具:profiler,MAT。

多次抓取prof文件,分析。一般来讲,fragment过多,activity过多,被持有。再分析下MAT里面的objects和引用关系。找到谁耽误了内存释放。

图片的使用,注意RGB565,resize。不过现在都用Glide省去了不少烦恼。

卡顿优化

16.6ms;vsync。

工具:systrace

​ 分析分析一些黄色红色区域的方法执行;自行研究代码执行时间等等;

​ blockCannary

​ 监听了ActivityThread的消息队列disptachMessage的事件;统计事件处理的时间消耗。

​ 因为所谓的主线程卡顿,其实就是在UI线程这个handler里面干的每一件时间是否超时嘛。

SharedPerfence优化

Sqlite优化

网络优化

多线程优化

volatile

synchronized

AtomicXXX

jdk1.6以后,推荐使用synchronized,java源码都改用了。

synchronized的升级过程:

->偏向锁(偏向加锁的第一个线程来抢占则不用同步处理;)

->轻量级锁(不释放cpu,自旋锁CAS,就是在JVM层面,在锁门口等着期待着别人释放,马上抢进去)

->重量级锁(系统内核态用户态切换,挂起线程,阻塞)

多线程编程

asyncTask、HandlerThread、IntentService、ThreadPoolExcutors

APK优化

无用资源清理;gradle编译忽略;proguard忽略;第三方包的精简。

tinypng;shape|selector图形背景色;

微信的资源压缩方案;

混淆;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值