组件
组件
组件
组件功能是为了兼容老版本的IntelliJ Platform而遗留的功能,使用了组件的插件不能动态加载,需要重启才能安装、更新和卸载插件
组件根据作用域的不同,分为 <application-components>, <project-components>, 和<module-components>
替换
如何把组件替换为新的功能,请看下面文档:
替换Manage State 组件
用户在执行某些操作的时候,需要记录操作的状态和逻辑,使用 服务
替换持久化状态(Persisting State)组件
在应用级或者项目级插件的时候,如果需要持久化一些状态,使用 服务 ,实现 PersistentStateComponent 接口,
详情查看 持久化组件状态文档
替换订阅事件组件
订阅事件,使用 监听器 ,或者如果存在扩展点的话,创建一个扩展 (例如:com.intellij.editorFactoryListener)
替换应用启动组件-Application Startup
注意
尽量避免在应用启动的时候执行操作,会拖慢启动速度
如果必须在项目启动的时候执行组件,尽量满足下面条件:
应用启动类插件只在打开项目的时候执行,或者在执行插件的某个操作时执行,这类插件应尽量订阅AppLifecycleListener ,也可以参考 只运行一次任务
在启动的时候执行后台操作,可以实现 PreloadingActivity
替换打开项目时运行的组件
在打开项目的时候执行的组件,可以替换为以下2种扩展 :
com.intellij.postStartupActivity
StartupActivity 在 EDT(Event Dispatching Thread)上立即执行,如果需要异步并行执行,可以实现 DumbAware接口
com.intellij.backgroundPostStartupActivity
IntelliJ Platform 2019.3版本以后 StartupActivity.Background 扩展会在后台延时5秒后执行
运行时间长的或者需要大量CPU计算的任务,应该让用户能看到任务执行情况,可以使用 ProgressManager.run(Task.Backgroundable) 执行,
如果需要访问索引,必须使用DumbService封装一下,了解更多查看文档-线程规则
替换关闭项目和应用时运行的组件
如果需要在关闭项目或应用的时候执行代码,可以实现 Disposable接口的dispose()方法(详情 看文档 服务),
//todo 或者 use Disposer.register() passing a Project or Application service instance as the parent argument (see Choosing a Disposable Parent).