快速业务通道

Eclipse中的图片资源管理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
点虽然带来了性能的提高,但是并没有解决图片资源释放的问题,倒是给开发者留下了一种假象 ,造成了随便使用ImageDescriptor的问题,反而造成了大量的图片资源(当然,更多的是由于调用 createImage的方式造成的,因为每次都创建一个全新的图片资源)没有释放。

到现在为止,我们看到JFace已经对SWT中的图片资源的管理做了一个小的补充:提供了 ImageDescriptor.createResource的方式,可以利用缓存效果,能够减少不必要的图片系统资源创建,而 且效率有所提高。关于如何释放,可以参考SWT中覆写Component.dispose的方式,例如在label provider 使用的图片资源,可以覆写对于provider的dispose方法,JFace框架会自动调用。

Eclipse中的图片资源管理(4)

时间:2011-08-05 朱兴

【JFace中图片 资源管理--ImageRegistry & ResourceManager】

下面,我们接着看一下JFace中的 ImageRegistry的实现原理。

首先我们看一下JFace中的资源管理门面类(façade class) JFaceResources,我们由它来获取我们的JFace ImageRegistry:

public static ImageRegistry getImageRegistry() {    if (imageRegistry == null) { imageRegistry = new ImageRegistry(getResources(Display.getCurrent()));    }    return imageRegistry; } public static ResourceManager getResources(final Display toQuery) {   ResourceManager reg = (ResourceManager)registries.get(toQuery);   if (reg == null) {     final DeviceResourceManager mgr = new DeviceResourceManager (toQuery);         //向Display hook了销毁线程 toQuery.disposeExec(new Runnable() {      public void run() {        mgr.dispose();         registries.remove(toQuery);      } });   }   return reg; }

分析了一下ResourceManager(DeviceResourceManager)的实现,我们发现 :DeviceResourceManager就是对DeviceResourceDescriptor(ImageDescriptor)进行了引用计数管理。 通过JFaceResources.getResources利用了前面说的Display的hook销毁机制(注意,如果不通过 JFaceResources.getResources来获取ResourceManager,则不会默认享受Display的hook销毁机制,需要 自己向Display注册),确保由被托管ImageDescriptor创建的残留在系统中的图片资源在Display release的时候会被彻底销毁。核心方法如下:

create(DeviceResourceDescriptor descriptor) 

//如果是首次注册,创建引用技数,allocate资源并对资源进行缓存

//如果是已经注册,增加引用技数,直接返回缓存的系统资源

destroy(DeviceResourceDescriptor descriptor) //将

//如果引用技术==1,通过调用deallocate彻底销毁资源

//如果引用技术>1,削减引用计数(系统资源不会被销毁)

那就是说,如果一个ImageDescriptor被ResourceManager托管了,那由它创建的资源(注意:通过 ImageDescriptor.createResource的方式)由两种销毁的途径:

1、如果不通过JFaceResources.getResources的方式,单独使用ResourceManager,则只能利用 ResourceManager的引用计数管理来销毁资源(引用计数为0时),通过显示调用 ResourceManager.destroy来削减引用计数。

2、如果通过JFaceResources.getResources来使用ResourceManager,则除了能够使用到引用计数管理 资源,同时也默认使用了Display的hook销毁机制,JFace的ImageRegistry也很好的利用了这一点。

Eclipse中的图片资源管理(5)

时间:2011-08-05 朱兴

现在回头看一下ImageRegistry提供的核心操作,着重分析一下ImageRegistry在利用了 ResourceManager对ImageDescriptor进

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号