- 压缩APK文件
- 优化UI
- 内存优化
- 优化代码
- 查看代码逻辑,提取通用代码
- 设计模式
压缩APK文件
- Android studio分析删除无用资源
- 压缩图片
- 压缩:一般背景图几百k,icon最多几k,工具TinyPNG。
- 图片适配:因为Android各种机型就需要适配不同机型,图片就需要加载多套密度的图片。建议只适配一种分辨率的如:xhdp或者xxhdpi的,减少图片大小。阿里巴巴Android开发手册也有相关建议。
- 图片压缩使用WebP格式
- 混淆编译,编译后删除多余方法
优化UI
- Merge,include重用布局文件
- 使用ViewStub仅在需要时才加载布局
- 减少不必要的层次:巧用Hierarchy Viewer
- 去除不必要的背景,减少过度绘制
- 尽量多使用 ConstraintLayout、RelativeLayout、LinearLayout
- Android文字大小设置用dp不用sp
- NestedScrollView替代ScrollView
- 查看手机开发者模式"调试GPU过度绘制"
内存优化
- handler内存泄漏
- GC原理
- 内存抖动
代码优化
- Effective Java 第16条:复合优先于继承:用代理模式优化单继承问题
-
避免在内部调用Getters/Setters方法(需要翻墙)
面向对象中封装的思想是不要把类内部的字段暴露给外部,而是提供特定的方法来允许外部操作相应类的内部字段。但在Android中,字段搜寻比方法调用效率高得多,我们直接访问某个字段可能要比通过getters方法来去访问这个字段快3到7倍。但是编写代码还是要按照面向对象思维的,我们应该在能优化的地方进行优化,比如避免在内部调用getters/setters方法。 - @IntDef、@StringDef注解代替Enum枚举
- 数据量千级以内或者简单配置文件信息使用SparseArray或ArrayMap代替HashMap
SparseArray使用两个数组,一个int数组保存key为int,一个object数组保存values。使用deleted字符来替代删除的value,最后在一起gc。ArrayMap使用两个数组,一个hash数组,一个object数组,奇数保存key,偶数保存value。
- WebView性能优化