性能优化(理论简化版)

先贴上原版 

性能优化 详细版

下边这个用来速记用可能不全 


性能优化:

  1. 布局优化
  2. 绘制优化
  3. 内存优化
  4. 线程优化
  5. 响应速度优化
  6. 耗电优化
  7. apk瘦身
  8. 其他优化

布局优化:

  • 减少布局的嵌套 布局的层数少了 变相增加了android的绘制速度
  • 使用合适的布局 绘制速度上 FramLayout>LinearLayout>RelativeLayout
  • 采用<include>标签 提高布局复用  
  • 使用ViewStub延时加载按需求加载布局 提高程序初始化效率
  • 布局调优工具
    (1) hierarchy viewer    (2) lint
  • 使用<merge>标签来代替布局顶结点是FrameLayout的布局

merge标签可用于两种典型情况:
a.  布局顶结点是FrameLayout且不需要设置background或padding等属性,可以用merge代替,因为Activity内容试图的parent view就是个FrameLayout,所以可以用merge消除只剩一个。
b.  某布局作为子布局被其他布局include时,使用merge当作该布局的顶节点,这样在被引入时顶结点会自动被忽略,而将其子节点全部合并到主布局中。

绘制优化:

  • 自定义view的onDraw方法里面避免重复创建新的局部对象 这个方法会重复调用 占内存
  • 不要做耗时操作 会抢占cpu时间 造成绘制不流畅

内存优化:

  • file文件 io流等都有缓存 不用时要关闭
  • 注册对象记得注销 不然可能会导致观察者对象一直维持着该对象的引用
  • 存放对象的集合 不用时记得清空
  • webview不会自动释放内存 不用时记得释放内存或者用独立的web进程,与主进程隔开
  • 还可以通过一些分析工具如MAT来找出潜在的内存泄漏 然后解决
  • 内存泄漏会导致app占用内存过高 严重时会导致OOM内存溢出

响应速度优化:

  • 主线程不要做耗时操作 
  • 太多可能会导致启动时黑屏或者ANR程序未响应

线程优化:

  • 采用线程池
  • 可以复用线程 避免在程序中创建大量的Thread 减少性能开销
  • 可以控制线程最大并发数 避免大量线程抢占资源导致阻塞

耗电优化:

  • 使用增强for循环和switch语句代替if语句 避免使用浮点运算
  • 减少网络状态下的数据传输
  • 避免wakelock锁使用不当 这个锁会使cpu一直处于启动状态 非常耗电 要合理使用

apk瘦身:

  • 使用proGuard工具 它包括压缩 优化 混淆等功能
  • 使用shape代替背景图片
  • 资源优化: 比如使用android自带的Lint工具删除多余的资源 资源文件最少化
  • 第三方库优化: 避免重复功能的so库 删除v7  x86 下的包 jar包等
  • 插件优化: 如某些功能某些模块 按需求下载 减少安装包大小

其他优化:

  • 刷新优化:合理利用缓存 减少刷新次数 缩小刷新范围
  • log优化: 项目上线前清楚log
  • 广播优化:避免使用全局广播 全局广播十分消耗性能 如果进行内部传递尽量使用接口回掉或者eventBus代替 动态广播使用后要记得注销
  • 内部类优化:尽量使用静态内部类 这样可以避免潜在的由于内部类创建实例而导致的内存泄漏  *非静态内部类会持有外部类的引用,其外部类在销毁之前,如果该非静态内部类的任务还未完成,将会导致外部类的内存资源无法正常释放,造成了内存泄漏。静态内部类中未持有外部类的引用*
  • 枚举:避免使用枚举。。。内存开销大
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值