*概述

---SWT中创建的与操作系统相关的资源需要手动释放,如Image,Font,GC等,从api的角度看,就是org.eclipse.swt.graphics.Resource的所有子类.

所以对于需要重复利用的资源,我们一般做法是定义一个Map管理这些资源,最后再释放,如下面的做法

ColorManager示例

---还有另外一种方式,利用SWT的特性:每个SWT程序,都有一个Display对象,Display在UI开始时被创建,在程序结束时被释放,咱们看看Display提供了些什么.


*实现原理

---display释放调用过程分析

Device.dispose()->Display.release()->Display.disposeList执行,

Display片段

---现在知道了,只要给数组添加java.lang.Runnable,在Runnable.run()实现资源释放,这样就实现了我们缓存和自动释放的目的.

添加Runnable

*示例分析

---jface根据上面介绍的原理,在org.eclipse.jface.resource下提供了对需要释放资源的缓存类

---以org.eclipse.jface.resource.ColorRegistry为例,看看实现方式

ColorRegistry示例

*总结

---由于资源创建过多,没有及时释放,或者遗漏需要释放的资源,会导致"no more handlers"异常,以致程序崩溃.

所以缓存能提升性能,避免忘记释放,但是要注意在恰当的时候就及时释放.

posted on 2011-06-16 20:07  戴忠  阅读(1897)  评论(0编辑  收藏  举报