使用兼容层时如何注册e4生命周期钩子?

How to register an e4 lifecycle hook when using the compatibility layer?

将基于 3.7 的 eclipse 应用程序迁移到 e4 时如何注册生命周期挂钩?

对于纯 e4,我会使用产品扩展点设置产品的 lifeCycleURI 属性。这也是定义应用程序模型的地方。

我的印象是,兼容层负责所有这些,因为它使用遗留应用程序模型定义。因此,我根本不知道如何使用我的生命周期钩子。

您仍然可以在产品定义中使用 lifeCycleURI 定义生命周期 class,前提是您的产品指定的应用程序调用 PlatformUI.createAndRunWorkbench。这将运行处理生命周期的代码。

例如在一个简单的测试 RCP 中。产品是:

<extension
     id="TestRCPView.product"
     point="org.eclipse.core.runtime.products">
  <product
        application="TestRCPView.application"
        name="TestRCPView">
     <property
           name="lifeCycleURI"
           value="bundleclass://TestRCPView/testrcpview.LifeCycle">
     </property>
  </product>
</extension>

其中有 lifeCycleURI。

它引用的应用程序是:

<extension
     id="TestRCPView.application"
     point="org.eclipse.core.runtime.applications">
  <application>
     <run
           class="testrcpview.Application">
     </run>
  </application>
</extension>

还有 testrcpview.Application

public class Application implements IApplication
{
  @Override
  public Object start(final IApplicationContext context)
  {
    Display display = PlatformUI.createDisplay();
    try
     {
       int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
       if (returnCode == PlatformUI.RETURN_RESTART)
         return IApplication.EXIT_RESTART;

        return IApplication.EXIT_OK;
     }
    finally
     {
       display.dispose();
     }
  }


  @Override
  public void stop()
  {
    if (!PlatformUI.isWorkbenchRunning())
      return;

    IWorkbench workbench = PlatformUI.getWorkbench();

    Display display = workbench.getDisplay();

    display.syncExec(new Runnable()
      {
        @Override
        public void run()
        {
          if (!display.isDisposed())
            workbench.close();
        }
      });
  }
}