布局优化
1. 合理运用布局
布局优化的核心就是尽量减少布局文件的层级,常见的方式有:
- 多嵌套情况下可使用RelativeLayout减少嵌套。
- 布局层级相同的情况下使用LinearLayout,它比RelativeLayout更高效。
- 使用<include>标签复用布局
- 使用<merge>标签减少层级
merge标签一般和include标签一起使用减少布局层级,merge标签最好是替代FrameLayout或者布局方向一致的LinearLayout。比如include标签所在的父容器LinearLayout布局方向是垂直的,而include所引用文件的布局也是LinearLayout并且垂直,则可以使用merge标签 - <ViewStub>标签懒加载
View的GONE和INVISIBLE设置布局可见方法效率不高,系统依然会解析他们,ViewStub可以解决这个问题。ViewStub不可见不占据布局位置,其操作的布局文件,当需要显示时,调用对应方法即可,具体如下
ViewStub viewstub = findViewById(R.id.viewstub);
viewstub.inflate();
viewstub.setVisibility(View.VISIBLE);
2. 避免GPU过度绘制
- onDraw可能会调用多次,避免在onDraw中创建对象及做耗时操作
- 移除不需要的Background
内存优化
切换应用时后台APP清理机制
- 采用方式是LRU Cache, 维护一个App队列,如果内存不够,优先清理最近最少使用的app
- onTrimMemory方法,会在根据当前内存状态及app状态进行回调,此时可以做一些处理。
1. 数据结构优化
- 频繁字符串拼接用StringBuilder
- ArrayMap、SparseArray替换HashMap
- 内存抖动
2. 对象复用
- 复用系统自带资源
- ListView/GridView的convertView复用
- 避免onDraw中里面执行对象创建
3. 避免内存泄漏
内存泄漏
逻辑上对象已不使用了,但还是被其他对象引用着,导致GC没法对它回收。
4. OOM问题优化
OOM绝大部分是与图片相关
- 注意临时Bitmap的及时回收
- 单张大图可采用如下方式加载
1.缩放比例
2.更改为RGB.565
3.区域加载
网友评论