一、布局优化
1. 减少布局嵌套层级:
- 使用
ConstraintLayout书写布局 - 使用
include、merge等标签 - 必要时使用自定义控件
2. 延迟加载布局
- 使用ViewStup可以在代码中动态加载布局
3. 避免在主线程进行耗时操作
我们可以通过手机开发者模式下的调试GPU过度绘制和GPU呈现模式分析两个功能检测UI是否被过度绘制了。
二、内存优化
内在泄漏主要应注意两点:
- 避免生命周期长的对象引用生命周期短的对象。
- 本地资源Java虚拟机无法自动回收,用完后要及时关闭。
内存泄漏主要有以下几种情况:
- 子线程或Handler持有Activity的强引用。可以使用ApplicationContext或软引用解决此问题。
- 非静态内部类默认会持有外部类的强引用导致内存泄漏。建议使用外部类或静态内部类。
- 全局静态集合或单例对象持有其它短生命周期的对象时,用完没有及时释放,也会导致内存泄漏。
- 及时关闭BroadcastReceiver、Cursor、Stream、TypedArray等对象,避免内存泄漏。
我们可以使用LeakCanary监控APP的内存泄漏情况。
在解决了内存泄漏的问题后,我们可以从以下几个方面对APP进行内存优化:
- 尽量避免大量或频繁
new对象 - 使用线程池代替
new Thread() - 对图片进行压缩和三级缓存
三、接口优化
- 对于耗时或数据量较大的接口,可以给接口做缓存并加上版本控制,以实现接口的增量请求,可以极大地提升接口的响应速度。
四、资源优化
- 使用TinyPng压缩图片
- 使用Proguard启用代码混淆
- 使用Android Lint工具检查并删除无用的资源文件