发明内容
有鉴于此,本发明的目的是提供一种实现插件的方法和装置,保证主程序的执行不因插件质量的参差不齐而出现崩溃的问题。
为了解决上述问题,本发明实提供了一种实现插件的方法,在主程序进程外设置插件引擎,该方法包括:
当主程序需要调用插件时,所述插件引擎设置一个独立于主程序的进程来启动插件。
其中,所述插件引擎设置一个独立于主程序的进程来启动插件包括:
读取插件的配置信息,根据插件的配置信息对应更改主程序的相关参数;
当用户调用主程序相关参数时,根据相应的配置信息,设置一个独立于主程序的进程调入并启动插件的实施程序。
其中,所述插件的配置信息包括:
界面配置信息,用于配置插件的界面;
事件配置信息,用于定义插件的各种事件响应方式;和/或,
实施配置信息,用于定义实施进程的调用机制与参数生成过程以及调用实施进程的各种规则。
其中,所述主程序有界面时,所述界面配置信息包括界面接口元素、界面元素、和/或界面样式;或
当所述主程序没有界面时,所述界面配置信息包括插件调入点信息。
其中,进一步包括:
当所述插件中包含子插件时,读取所述子插件的配置信息;
根据所述子插件的配置信息,相应修改主程序和/或所述插件的相关参数;
当用户调用主程序和/或所述插件的相关参数时,建立独立的进程启动所述插件和/或所述子插件的实施程序。
其中,所述根据插件的配置信息对应更改主程序的相关参数包括:
根据所述插件的界面配置信息,改变所述主程序的界面;或读取所述插件的调入点信息;
根据所述插件的事件配置信息,修改所述主程序的事件响应处理。
其中,所述事件包括:插件实施进程的回调事件,通过所述回调事件,所述插件可以回调到主程序或父程序。
本发明实施例还提供了一种实现插件的装置,设置于主程序进程外,包括:
第一模块,用于读取插件的配置信息;
第二模块,用于当主程序需要调用插件时,向主程序提供插件的信息以供主程序加载,同时根据所述插件的信息设置独立的进程启动插件。
其中,所述第二模块包括:
第一子模块,用于根据插件的配置信息修改主程序相关参数;
第二子模块,用于当用户调用主程序的相关参数时,建立独立的进程启动插件的实施程序。
由于本发明所提供的技术方案为在主程序外设置插件引擎,通过插件引擎控制插件的调用,使插件的进程独立于主程序,从而插件的崩溃不会影响到主程序的进程。进一步的,将插件的配置信息和实施程序分离,在主程序需要实际调用插件时,才真正触发插件的实施程序,节省了系统资源,提高了插件的加载速度,同时获得更加灵活的插件调用方式。
具体实施方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
本发明公开了一种实现插件的方法,在主程序进程外设置插件引擎,通过插件引擎来控制插件的调用问题,插件引擎在调用插件时保证插件的进程独立于主程序,从而在插件出现问题时不会影响到主程序的进程。
图1为本发明一实施例公开的一种实现插件的方法的流程图。如图1所示,该方法包括:
步骤101:在主程序进程外设置插件引擎。插件引擎可供主程序调用,是用于管理各种插件信息的组件。主程序对插件的任何操作都经过插件引擎,主程序只跟插件引擎来交互。
步骤102:当主程序需要调用插件时,插件引擎读取插件的信息,向主程序提供插件的信息以供主程序加载,同时根据插件的所述信息设置独立的进程启动插件。
其中,插件的信息可以是插件的原数据信息,包括插件的配置信息和实施程序,在本发明一实施例中,插件的配置信息和实施程序可以是独立的两部分,在本发明另一实施例中,两者可以是一个整体。
当主程序在执行过程中需要调用插件以扩展功能时,首先会询问插件引擎有关插件的信息,如有哪些插件要生成自己的菜单项,这些菜单项调用的插件实施进程是什么,存储在何处。根据插件的这些信息,主程序可以获取插件事件响应方式,同时更改自己的事件响应方式,这样才能在后续响应插件的事件。当插件的一个事件被触发时(如用户点击主程序上的界面时触发),插件引擎可以调用一个独立的进程来启动插件,生成跟用户交互的某个或某些界面元素以及响应过程。某一个事件可以由多个小事件组成,这种情况下,插件下还包含子插件。
由于每个插件都由不同的事件触发,这些插件均会在独立与主程序进程的不同的进程中执行,即使插件进程崩溃也不会影响到主程序进程的正常执行。同时由于各个插件的进程也是相互独立的,一个插件进程的崩溃也不会影响到其他插件进程的执行。
图2为本发明一实施例公开的一种实现插件的方法的流程图。本实施例是在上述实施例的基础上,把插件的配置信息部分与实施程序部分相分离,即本实施例插件是由配置信息和实施程序两个彼此分离的部分组成。其中,插件的配置信息为插件引擎执行插件的实施程序所需要的各项参数,插件的实施程序负责插件的具体实施,通过接收的参数完成某项插件的任务。
步骤201:在主程序进程外设置插件引擎。
步骤202:当主程序需要调用插件时,首先启动插件引擎,插件引擎读取被调用插件的配置信息。
通常,预先将插件的配置信息储存在定义好的相应目录中,插件引擎会在相应目录中查找和读取相应的插件配置信息。
插件的配置信息具体包括:插件的界面配置信息、事件配置信息和实施配置信息。
界面配置信息用于配置插件的各种界面元素,包括配置插件的界面元素和界面接口元素。
其中配置插件的界面接口元素包括配置主程序里需要嵌入的插件界面接口,比如插件的菜单项,插件的按钮栏,插件的弹出菜单项等等。
插件的界面元素一般由文本框,列表框,单选框,复选框等基本的GUI界面元素构成,比如可以包括对话框,确定框,文件询问框,错误提示框等。用来在插件的事件响应过程中跟用户进行交互,还可以定义一些交互的变量用来生成插件实施进程的调用参数。
插件的界面配置信息还可以配置界面样式信息。插件的界面样式信息用于实现插件界面元素的样式的灵活配置。可以单个配置界面样式也可以整体配置,整体配置的方式可以统一插件的整体风格,单个配置可以进行界面元素的个性化配置。每个插件都可以根据用户的不同要求定义插件的界面样式,例如可以像css那样灵活的对插件界面改头换面。
插件的事件配置信息定义插件的各种事件响应方式。具体来说,插件的事件配置信息定义包括插件的界面元素对事件响应的处理和插件的实施程序在执行过程中的各种事件响应处理。其中,在定义界面元素对事件响应的处理时,对于没有界面的主程序,就需要定义主程序对插件的调入点信息。
需要强调的是,该部分还定义了一个重要的事件,即插件实施进程的回调事件,实质上就是插件实施进程的回调接口。通过该回调接口,可以回调到主程序或父程序。
插件的实施配置信息,该部分负责插件实施进程的配置,可以配置实施进程的调用机制与参数生成过程以及调用实施进程的各种规则,如需要定义对实施进程调用的接口,以实现主程序对实施进程的调用。
步骤203:插件引擎根据插件的配置信息,修改主程序相关参数,使得主程序在后续与插件的事件建立关系,并支持相应插件的事件响应。
插件引擎读取插件的配置信息后,将插件的配置信息反馈给主程序,根据相应的配置信息改变主程序的界面和事件。具体来说包括:
1)界面部分
插件的界面接口元素:根据插件的配置信息直接在主程序的界面里添加插件的菜单项,插件的按钮栏,插件的弹出菜单项等等。
插件的界面元素:根据插件的配置信息,在事件相应过程中,跳出对话框,确定框,文件询问框,错误提示框等。
插件界面元素的样式,根据插件的配置信息,用来实现插件界面样式的灵活配置。
若主程序没有界面,则需要根据读取到的插件调入点信息确定插件的调入点。
2)事件部分
插件引擎还需要根据配置信息对应更改主程序的事件响应处理。
步骤204:当用户调用主程序的相关参数时,触发一个事件,插件引擎建立独立的进程启动插件的实施程序。
在具体的实施例中,当用户点击插件在主程序的界面(比如某个菜单项或按钮)时,触发相应插件的事件,事件触发后为该实施进程建立单独的进程,该进程独立与主程序的进程。
本实施例所提供的方法并不仅限于调用一个插件,可以同时调用多个插件,即一个主程序可以调用多个插件进程,而各个插件的进程又是相互独立的。
在本实施例中,将插件的配置信息和实施程序完全隔离,在主程序需要实际调用插件时,才真正触发插件的实施程序,节省了系统资源,提高了插件的加载速度,同时获得更加灵活的插件调用方式。
在本发明另一实施例中,为插件开发者提供界面定义接口、事件定义接口、样式定义接口等,插件开发者只需要简单的配置就可以生成自己的插件,极大地简化了插件开发的复杂度。
在本发明一实施例中,当前被调用的插件中又可以包含另一个插件,则在当前被调用插件的实施程序的执行过程中,进一步调用另一个插件,另一个插件定义为当前被调用插件的子插件。图3为本发明一实施例公开的一种实现插件的方法的流程图。如图3所示,该方法包括如下步骤:
步骤301:在主程序进程外设置插件引擎。
步骤302:插件引擎读取将被调用的插件(后续称为父插件)以及其子插件的配置信息,包括插件与子插件的关系信息(如子插件下可能还包含更低一层次的子插件)。
步骤303:插件引擎将父插件的配置信息以及与主程序相关的子插件配置信息返回给主程序,主程序根据返回的父插件配置信息和子插件配置信息修改主程序相关参数,渲染界面元素以及对插件的触发事件,使得主程序在后续与插件的事件建立关系,并支持相应插件的事件响应。
如果没有任何与主程序相关的子插件,则插件引擎仅返回父插件配置信息给主程序。
这里,如果某些子插件的界面信息需要显示在主程序界面上,那么这些子插件就可以称为与主程序相关的插件。
步骤304:插件引擎将与父插件相关的子插件配置信息返回给父插件,父插件根据返回的子插件配置信息修改父插件相关参数,使得父插件在后续与插件的事件建立关系,并支持相应插件的事件响应。
这里,如果某些子插件的界面信息需要显示在父插件界面上,那么这些子插件就可以称为与父插件相关的插件。
具体来说,每个插件相对于其子插件而言就是其主程序,即插件与子插件之间通过插件引擎进行交互。
步骤305:当用户调用主程序或者父插件的相关参数时,触发一个事件,插件引擎建立独立的进程启动事件对应的父插件或子插件的实施程序。
如当用户点击主程序上与父插件A相关的功能按钮时,插件引擎建立独立进程启动父插件的实施程序,弹出对话框,如果用户此时进一步点击对话框中与某个子插件相关的功能按钮时,插件引擎建立独立进程启动该子插件的实施程序。图4为上述实施例所示的插件调用机制的示意图。
综合以上实施例所公开的技术方案,可以通过设置于主程序进程外的插件引擎启用多个插件进程,多个插件的实施进程都是相互独立的,且都在主程序进程外。一个插件进程也可以包含多个子插件进程,各个子插件实施进程互相独立。插件与主程序之间,子插件与插件之间又通过回调接口互相合作,共同完成任务。
本发明实施例还提供了一种实现插件的装置,根据上述描述即可知道,该实现插件的装置可以是插件引擎。本发明所提供的实现插件的装置,设置于主程序进程外,用于控制插件的调用,包括:
第一模块,用于读取插件的信息;第一模块和插件之间具有信息传输通道,可以从插件处获得该插件的配置信息;
第二模块,用于当主程序需要调用插件时,向主程序提供插件的信息以供主程序加载,同时根据所述插件的信息设置独立的进程启动插件。
其中,第二模块又包括:
第一子模块,用于根据插件的配置信息修改主程序相关参数;
第二子模块,用于当用户调用主程序的相关参数时,建立独立的进程启动插件的实施程序。
本领域技术人员可以根据上述规则,类推出其他各种设置方案,本发明可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可以根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都属于本发明的权利要求保护的范围。