快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
,直到Display release的时候才销毁。

3、要投入精力对ImageRegistry的key值进行管理,否则,会引起混乱。因为ImageRegistry本质上可 以看作Eclipse平台中的一个全局对象,对其含有的key列表的管理是再所难免。

【Eclipse中插件share images机制】

在Eclipse,一个插件可以暴露(expose)自己的图片资源,以便提供给需要的插件使用,我们就称它 为插件之间的share images机制吧。上面提到过了,这其实是部分复用了JFace ImageRegistry的管理机 制。

如何共享(可以参照Workbench插件的share images实现):

1、按照默认约定,创建一个ISharedImages接口,提供有意义key值

2、实现自己创建的ISharedImages接口,并结合ImageRegistry来管理图片资源;并提供显示的dipose 公共接口,负责释放自己管理的图片资源

3、在自己的插件中暴露ISharedImages

4、在合适时机,调用ISharedImages.dispose来释放资源。这个时机一般选择在Plugin stop的时候比 较合适,当然,也可以选择在其他时机。

如何使用:

1、获取目标插件的ISharedImages实现,并通过ISharedImages提供的key值来获取特定的图片资源。 以workbench插件share images为例:

PlatformUI.getWorkbench().getSharedImages().getImage(key)

2、暴露图片资源的插件负责图片资源的创建和销毁,其他插件不要参与销毁过程。换句话说,还是要 遵守谁创建、谁负责的原则。以workbench插件share images为例:

在workbench close的时候,会间接调用ISharedImages.dispose()。

【Eclipse中使用图片资源的经验总结】

1、坚持“谁创建,谁负责”的原则。分为如下:

a) 如果是用户自己创建的,请自己释放。例如通过覆写Component对于的dispose方法、通过覆写 label provider对应的dispose方法等等,这对于一些适用于局部的图片资源较为适合;当然,也可以变 态利用Display的hook释放机制(但是,一般对于长期使用的资源才会这样做!!!)。

b) 如果是通过JFaceResources.getImageRegistry的方式使用ImageRegistry时,请不要释放资源, 让ImageRegistry自己解决。一般使用于比较频繁使用的全局共享图片资源,例如想保持风格统一的图片 资源等。

c) 如果是使用了IShareImages的机制,请提供图片资源的插件自己负责释放。如何使用这种机制, 最好参照eclipse中已有的实现,保持风格统一,“有样学样”吧。

2、正确认识系统资源泄漏引起的crash问题的原因。导致原因有两种:

a) 首先,是没有释放,导致泄漏。请参照上面的“谁创建,谁负责”的原则。

b) 其次,是释放的过晚,导致积累过多。例如本来应该立即释放的资源,反而通过ImageRegistry进 行了托管,同时有没有控制引用计数的管理,导致到了Display release的时候才释放资源。同样道理, 本来不需要暴露给其他插件贡献的图片资源,反而暴露了,导致释放过完等。

3、正确认识系统资源的创建和销毁所带来的时间消耗,这是从系统性能的角度考虑。例如,可以用 ImageDescriptor.createResource的方式替换原始的new Image的方式,减少创建资源过于频繁和销毁资 源过于频繁所带来的时间占用。对于需要长期使用的贡献资源,可以使用ImageRegistry的方式等等。

4、对于特殊的场景,可以在参考以上原理(例如JFace中的图片管理的实现原理分析)的基础上自己 实现图片资源的管理策略。这对团队开发产品的情况下尤其适用,一方面可以优化管理策略,使之更切近 团队应用;再者,可以减少JFace ImageRegsitry使用的复杂度,并减少误用。例如,我们可以把插件间 share images的机制看成是对JFace ImageRegsitry的灵活使用。

5、无论使用那种管理策略(无论是来自eclipse还是其他),使用这前一定要仔细看API说明,并

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号