Lint警告:Avoid object allocations during draw/layout operations (preallocate and reuse instead)
不要在自定义View的onMeasure、onLayout、onDraw等方法里面做new对象的操作。
因为实例化对象是会耗性能的,而这几个方法会被多次调用,所以需要将对象作为属性,在初始化的时候就实例化好对象,在这些方法里面直接用就行了!
1.若一些参数必须在onMeasure/onLayout/onDraw中获取,则可以先在构造函数中创建对象,在onMeasure/onLayout/onDraw中赋值:
private void init(){ //在构造函数中进行初始化
// 获取屏幕大小:通过Resources获取
DisplayMetrics dm2 = getResources().getDisplayMetrics();
mBitmap = Bitmap.createBitmap(dm2.widthPixels, dm2.heightPixels, Bitmap.Config.RGB_565);//ARGB_8888
}
public void onLayout(){//在onLayout方法中赋值:
screenW = fX = getWidth();
screenH = fY = getHeight();
mBitmap.setHeight((int) screenH);
mBitmap.setWidth((int) screenW);
}
ps:
2). getWindowManager()是Activity的方法
2.把只能调用一次的代码使用个布尔内置变量进行判断,让其只调用一次。
3.自定义控件心得:
自己给别人传值出去:提供一个方法即可
需要别人给自己传值进来,提供一个方法,或提供一个监听/接口。一般是动态变化的,最好提供一个监听/接口。