您的位置:首页 > 大数据 > 人工智能

重写View的onDraw方法生成Paint实例产生报警

2016-10-20 17:29 190 查看
来自百度知道的回答



如图所示,在onDraw方法里新建Paint对象会产生报警。

原因:

这个警告信息是 Android Lint 给出的,不是标准java的警告.

View 的 onDraw() 方法会被频繁的调用,android给出这个警告的意思是,不建议开发者在onDraw()函数体内进行对象分配.如果在其中有需要用到的对象,应该把这些对象的分配放在别处.

比如楼主这个问题,就可以在构造函数里初始化一个类的成员变量mPaint,在onDraw()函数体内只对其调用setColor(),不进行new操作.

按谷歌的解释,避免在onDraw()内分配对象,是为了减少垃圾回收器对绘图性能的影响.

我查了一下,Android所用的Dalvik虚拟机,其垃圾回收器工作时是需要 stop the world 的.意思是说,垃圾回收器工作时,会停止此虚拟机中的一切线程,等垃圾回收器工作完成,程序线程才能再次工作.

而垃圾回收最活跃的地方,必然是堆内存上,也就是new操作产生的内存占用.所以在onDraw()函数体内尽量少new对象出来,就可以尽量减少虚拟机 stop the world 的时间.

如不明白建议百度下java垃圾回收器的工作方式,大体了解下.

onDraw()调用到底有多频繁?你把你的这个view放进一个ScrollView里,然后在onDraw()里加一行log,然后滚动你的屏幕,看着海量的log输出,就会有些体会了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  view onDraw Paint