自定义控件中创建对象
程序员文章站
2022-06-08 14:54:14
...
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.把只能调用一次的代码使用个布尔内置变量进行判断,让其只调用一次。
推荐阅读
-
如何在DataGrid控件中实现自定义分页
-
visual studio2015中怎么自定义创建vb控件?
-
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
-
DataGridView中实现点击单元格Cell动态添加自定义控件
-
【转载】 C#中手动创建一个DataTable对象并写入数据
-
javascript中如何用构造函数创建对象以及子类的继承?
-
JavaScript中创建对象的7种模式详解
-
Winform中实现跨窗体获取ZedGraph的ZedGraphControl控件对象
-
【转载】 Sqlserver中查看自定义函数被哪些对象引用
-
JS中的函数与对象的创建方式