性能优化 - 常用代码和自定义View优化
1. 常用代码
1>:主线程中,不要做耗时操作;
2>:不要在 onDraw中开辟大内存,因为 onDraw也是 主线程;
3>:比如点击一个 button按钮,过了很久页面才能跳转过去,原因是因为 在 onCreate()方法中做了耗时操作,可以在页面中添加一个进度条,目的是先让页面从第一个页面跳转到第二个页面,但是这里必须注意:像类似的点击一个 button按钮,过了很久页面才能跳转过去的这种情况,只能出现一次,可以给数据做一次缓存, 第二次再进来时候需要直接从缓存中读取数据,就会快很多了
点击button长时间不能跳转页面需要做缓存.png
4>:在给 xml 设置 background时,如果根布局和子view布局颜色一样,就直接给 根布局设置 background,不要给 子view设置;
5>:对于 text、textSize、textColor,全部写到 res下:
text —— 必须把对应文本内容 写到string下边,然后引用到xml文件中;
textSize —— 必须把对应文字大小 写到dimens下边,然后引用到xml文件中;
textColor —— 必须把对应的文本内容 写到color下边,然后引用到xml文件中;
这个是强制的,如果以后要修改 text、textSize、textColor等任意一个属性,直接在 res下边修改 string、dimens、color即可,不用再xml文件中一个一个修改,很麻烦;
2. 自定义View
1>:如果有多个地方需要同时使用一个对象,不要重复创建该对象,可以在一个地方事先创建好,然后直接调用就ok;
2>:如果自定义View 涉及到动画,可以采用如下方式:
/**
* 针对于动画涉及到内存泄露的处理情况
*/
@Override
public void setVisibility(int visibility) {
// 不要再去摆放和计算,少走一些系统源码
super.setVisibility(View.INVISIBLE);
// 1. 首先清除所有子view的动画
mLeftView.clearAnimation();
mMiddleView.clearAnimation();
mRightView.clearAnimation();
// 2. 获取父布局,移除父布局中的子view,最后移除所有view
ViewGroup parent = (ViewGroup) getParent();
if (parent != null){
parent.removeView(this);
removeAllViews();
}
}
凡是涉及到动画,都可能涉及到 内存泄漏,可以采用上述方式解决内存泄漏:
1>:首先清除 所有子view的动画;
2>:获取父布局,移除父布局中的子view,最后移除所有view;