Android面试宝典 - 优化篇

一、性能优化

1. 布局优化

  1. 尽量使用include,merge,ViewStub标签
  2. 避免冗余嵌套以及过于复杂的布局,必要时可使用约束布局
  3. View的隐藏尽量使用GONE替代INVISIBLE
  4. 使用权重weight后将View的宽width和高height设置为0,减少运算
  5. 存在复杂嵌套布局时考虑自定义View替代,减少measure和layout次数
  6. 减少不必要的背景设置,避免过度绘制

2. 列表优化

  1. 使用RecyclerView替代传统的ListView和GridView
  2. 复用getView中的相关View,避免重复获取实例导致卡顿
  3. 列表滑动过程中不进行UI绘制,图片加载

3. 包体积优化

  1. 资源图片采用Webp格式
  2. 较大的资源图片可以使用AS自带能力压缩,也可以借助tingPng压缩
  3. 不同颜色的多个相同图标,只添加一个纯色图片资源,实际使用时用tint着色
  4. 打包时加入混淆
  5. 远程库依赖时尽量有限compileOnly

4. 卡顿掉帧优化

  1. 字符串拼接尽量使用StringBuffer和StringBuilder代替String
  2. onCreate中减少不必要元素的初始化以及耗时操作,加快Activity启动速度
  3. 避免在View的draw,measure,layout执行耗时以及耗内存操作,尤其draw方法中
  4. 严格遵守ANR规避原则,避免在UI线程中做耗时操作,譬如多次数据库操作,HTTP请求等
  5. 必要的耗时操作放到子线程执行,执行结束后抛到主线程更新UI,子线程使用线程池管理,减少线程创建,内存消耗

二、安全编码

  1. 敏感信息不可直接输出日志,如果必要,也需匿名化后输出
  2. 方法入参的对象使用前需要判空校验
  3. 数组、列表等集合操作时需要做好越界校验
  4. io流操作需要try catch,io流和数据库等操作后需要手动close
  5. 广播和监听等观察者需要反注册
  6. 开源组件需要扫描是否存在公开披露的漏洞
  7. 项目中引入的so库中的C代码需要扫描是否存在不安全函数
  8. 检查项目中是否存在dos攻击,比如sql注入等等

三、入库校验

  1. 可能为空的对象,使用前判空
  2. 无用代码,注释掉的代码需删除
  3. 未初始化的变量被使用
  4. 非静态内部类
  5. 超大类文件,代码行数阈值
  6. 超大资源文件,图片大小阈值
  7. 跨组件引用impl
  8. 类型强转前校验
  9. 方法和注释是否匹配
  10. 子类是否正确重写父类抽象方法和接口中的方法

你可能感兴趣的:(Android面试宝典 - 优化篇)