@SuppressLint("DrawAllocation")作用和解决方法
来源:互联网 发布:达内linux 编辑:程序博客网 时间:2024/05/22 14:41
在Android自定义控件中,经常会遇到这样的一些警告(如下图),这些警告如果不去处理的话,并不会影响我们程序的正常运行,但是总有强迫症的人看了会觉得很不爽,比如我就是其中一个。
其实,既然程序会报出这样的警告,肯定就会有他的不合理之处,只是并不会导致程序发生错误无法运行,我们写的代码平时也不多,所以一般对我们的程序不会有多大的影响,但是他会影响整个程序的安全性及一些其他性能,所以我们还是尽量去避免这写不合理之处。
警告原因:
首先,我们从警告的提示来看,Avoid object allocations during draw/layout operations (preallocate and reuse instead),意为避免在绘制/布局中去实例化对象。这样警告就很明显了,为什么会这样呢?
因为在View及其子类的onDraw(Canvas canvas)方法,会实时调用以更新界面,会频繁的创建对象和进行垃圾回收等,这明显就会影响UI的显示性能,这样一个显示很顺畅的用户界面就会因对象分配引起的一些垃圾回收机制进行短暂的停滞。
解决方法
具体的解决方法也很简单,我们只需要将创建对象等这些分配内存资源和会引起垃圾回收机制的操作在之前进行,例如设置为全局变量,提取一个init()方法来实例化对象等,这样就会解决这些问题了。
例如:
public class MyView extends View { /** * 声明画笔 */ private Paint mPaint; public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); // 初始化 init(); } public MyView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /** * 初始化 */ private void init() { mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStrokeWidth(1); mPaint.setColor(Color.BLUE); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(0, 0, 100, 100, mPaint); }}
PS: 这些小问题看似影响不大,但是时间久了,或者累积多了,就会使程序性能下降,甚至导致程序奔溃,尽量去避免他们。
2 0
- @SuppressLint("DrawAllocation")作用和解决方法
- @SuppressLint("DrawAllocation")作用和解决方法
- @SuppressLint("DrawAllocation")作用
- android TargetApi 和 SuppressLint
- TargetAPI和SuppressLint
- android 基础 @SuppressLint("NewApi")和@TargetApi()的作用与区别
- @SuppressLint
- @SuppressLint("NewApi")的作用
- @SuppressLint("NewApi")和@TargetApi()的区别
- @SuppressLint("NewApi")和@TargetApi()的区别
- @SuppressLint("NewApi")和@TargetApi()的区别
- @SuppressLint("NewApi")和@TargetApi(number)使用比较
- @SuppressLint("NewApi")和@TargetApi()的区别
- @SuppressLint("NewApi")和@TargetApi()的区别
- @SuppressLint("NewApi")和@TargetApi()的区别
- @SuppressLint("NewApi")和@TargetApi()的区别
- @SuppressLint("NewApi")和@TargetApi()的区别
- @SuppressLint("NewApi")和@TargetApi()的区别
- struct statfs
- Hadoop基础教程之搭建开发环境及编写Hello World
- 泛型
- 浅谈AbstractQueuedSynchronizer原理
- 《理解Java虚拟机》第二章读书笔记:Java内存区域与内存溢出
- @SuppressLint("DrawAllocation")作用和解决方法
- 从.txt文件中批量读取图片
- 海量数据处理
- SpringMVC详细示例实战教程
- Visual Studio如何引用外部XSD文件到XML
- 实现_VS调试,可IP访问 支持互联网
- C#Winform 各种控件缩写总结
- 解决ListView上拉加载更多图片会闪的问题
- 自定义控件View(三)___绘制饼状图