分享

编写插件启动类代码时候的注意点!

 hehffyy 2012-05-09
在Eclipse开发过程中,编写插件启动类(Activator)代码时候的注意点,简要列举如下。
        众所周知,org.eclipse.core.runtime.Plugin类中最核心的两个方法:start和stop,开发者通过覆写这两个方法,可以参与到osgi framework针对你贡献的Bundle的生命周期管理。注意点和简要理由列举如下:
       1、start方法中只干必须要干的事情。不是插件启动的必要条件的东西,一律不要防止到start逻辑中。根据
            个人经验,这种场景非常少,常用的功能是在AbstractUIPlugin启动的时候申请系统资源。
             【常犯的错误】
              最近发现一些人写start逻辑的时候,喜欢包含扩展加载的代码(自己定义了一个扩展点,在插件启动逻辑代码中预加载扩展)。完全不必要这么做,第一操作Eclipse扩展注册表本身是比较耗时的操作,而且如果加载的代码逻辑中包含了创建类实例的代码(IConfigurationElement.createExecutableExtension),很可能引起其他扩展插件的过早启动
     
      2、start方法中的自定义逻辑代码一定要确保安全。否则,可能一个简单的异常情况就使得你辛苦写的插件当掉了~_~,而且会间接引起对应扩展插件也启动不了

     3、如果start方法中干了活有一定耗时的嫌疑,简单的用时间戳测试一下大致的耗时
              【常见的错误】
              Eclipse底层在加载新类型的时候,会启动一个新的线程,而且该线程设置的超时限制。Eclipse加载你贡献的插件中的类型时,肯定要先启动你的插件。如果你的启动逻辑过于耗时,则有可能引起类加载超时的问题,最可恶的是,这种问题具有一定的偶然性

    4、建议保存Eclipse默认提供的Plugin Activator。发现有些人喜欢删除默认的启动类,他感觉他的插件不需要编写额外的启动逻辑代码。个人建议不要这么做,因为很多底层问题需要调试到插件启动的层面来判断,保留默认启动类,便于调试和跟踪插件的启动

    5、要假设stop方法只有在Eclipse实例退出的时候才被调用。关于这个问题的分析,最近两天有时间我会额外写一篇文章来分析一下(一般只有osgi framework在osgi应用退出的时候或者osgi console命令行管理中会调用这两者,自己一般不要去调用)。
         【常犯的错误】
          不少开发者假设自己写的插件真的会在不需要的时候被stop,这种想法过于天真。(首先如何判断不被需要对osgi的实现者来说就是很大的挑战,尤其是设计到有状态服务等的时候....这个问题很复杂,以后有机会和大家讨论)

    6、在starp和stop逻辑代码中,尽量不要去显式敢于Eclipse对插件生命周期的管理。这可能会引起很多莫名其妙的问题(请相信我,我曾经很多次用Bundle.start来启动我想启动的插件,结果出现见鬼的问题。以后和大家分享)。
        【常犯的错误】
          开发者显示调用Bundle的start和stop来控制一个目标插件,千万不要轻易这么干!!!如果想预启动,尽量使用Eclipse提供的startup扩展点,其在app laucher中会帮你预启动。


其他的问题,一时想不起来了。希望对插件开发的同行有帮助!
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多