1.一种Android程序中的组件管理方法,其中,该方法包括:
在所述Android程序的配置文件中预留一个或多个组件,为预留的每个组件声明一个进程;
在所述Android程序的插件的配置文件中声明该插件要使用的实现特定功能的组件的内容;
当所述插件需要运行所述实现特定功能的组件时,从预留的组件所声明的进程中找到一个可用进程;
将所述实现特定功能的组件的内容传递到所找到的可用进程对应的同类型组件中;
启动所述可用进程,使得所述可用进程对应的同类型组件在该进程中运行;
其中,所述将所述实现特定功能的组件的内容传递到所找到的可用进程对应的同类型组件中是指:
将所述实现特定功能的组件的内容封装在ComponentName类中;
通过Intent方法将该ComponentName类传递到所找到的可用进程对应的同类型组件中。
2.如权利要求1所述的方法,其中,在所述启动所述可用进程之前,该方法进一步包括:
获取并加载所述实现特定功能的组件的Class对象。
3.如权利要求2所述的方法,其中,所述获取并加载所述实现特定功能的组件的Class对象是指:
从所述插件的配置文件中获取所述实现特定功能的组件的内容;
自定义ClassLoader方法;
由所述自定义ClassLoader方法根据所述实现特定功能的组件的内容获取并加载所述实现特定功能的组件的Class对象。
4.如权利要求1所述的方法,其中,所述在所述Android程序的配置文件中预留一个或多个组件,为预留的每个组件声明一个进程包括:
利用所述Android程序的AndroidManifest.xml文件中的
标签预留一个或多个Service组件,为预留的每个Service组件声明一个进程;
和/或,
利用所述Android程序的AndroidManifest.xml文件中的标签预留一个或多个ContentProvider组件,为预留的每个ContentProvider组件声明一个进程。
5.如权利要求1所述的方法,其中,当所述实现特定功能的组件为Service组件时,所述启动所述可用进程,使得所述可用进程对应的同类型组件在该进程中运行是指:
通过context.startService方法启动所述可用进程,使得所述可用进程对应的Service组件在该进程中运行。
6.如权利要求1所述的方法,其中,该方法进一步包括:
在所述Android程序的配置文件中实时记录更新所述Android程序的各进程的进程信息。
7.如权利要求6所述的方法,其中,所述进程信息包括以下信息中的一个或多个:
进程编号、进程状态、进程启动/修改状态的时间、进程对应的组件名、进程的ID标识、进程中运行各组件的数量。
8.如权利要求7所述的方法,其中,在所述从预留的组件所声明的进程中找到一个可用进程之前,该方法进一步包括:
遍历所述Android程序的所有进程,根据各进程的进程信息,判断是否存在已分配给所述实现特定功能的组件的进程;
是则,直接令所述实现特定功能的组件在该进程中运行,不再执行所述从预留的组件所声明的进程中找到一个可用进程的操作。
9.如权利要求8所述的方法,其中,所述从预留的组件所声明的进程中找到一个可用进程包括:
遍历所有预留的组件所声明的进程,根据各进程的进程信息,判断是否存在闲置进程;
如果存在一个闲置进程,则将该闲置进程作为可用进程;
如果存在多个闲置进程,则选择其中最早启动的进程作为可用进程。
10.如权利要求9所述的方法,其中,所述从预留的组件所声明的进程中找到一个可用进程进一步包括:
如果不存在闲置进程,则强制回收最早启动的预留的组件所声明的进程,重新创建该进程作为可用进程。
11.如权利要求9所述的方法,其中,所述遍历所有预留的组件所声明的进程,根据各进程的进程信息,判断是否存在闲置进程包括:
遍历所有预留的组件所声明的进程,判断是否存在处于未启动状态的进程,是则强制回收该进程,重新创建该进程作为所述闲置进程;
否则判断是否存在处于停止状态的进程,是则强制回收该进程,重新创建该进程作为所述闲置进程;
否则判断是否存在处于暂停状态且距离上次启动已超过指定时间的进程,是则强制回收该进程,重新创建该进程作为所述闲置进程;
否则判断是否存在处于启动状态且距离上次使用Activity组件、Service组件、ContentProvider组件和Binder组件均已超过指定时间的进程,是则强制回收该进程,重新创建该进程作为所述闲置进程。
12.一种Android程序中的组件管理装置,其中,该装置包括:
配置单元,适于在所述Android程序的配置文件中预留一个或多个组件,为预留的每个组件声明一个进程;以及适于在所述Android程序的插件的配置文件中声明该插件要使用的实现特定功能的组件的内容;
查找单元,适于当所述插件需要运行所述实现特定功能的组件时,从预留的组件所声明的进程中找到一个可用进程;
启动单元,适于将所述实现特定功能的组件的内容传递到所找到的可用进程对应的同类型组件中;以及适于启动所述可用进程,使得所述可用进程对应的同类型组件在该进程中运行;
其中,所述启动单元,适于将所述实现特定功能的组件的内容封装在ComponentName类中;再通过Intent方法将该ComponentName类传递到所找到的可用进程对应的同类型组件中。
13.如权利要求12所述的装置,其中,
所述启动单元,进一步适于获取并加载所述实现特定功能的组件的Class对象。
14.如权利要求13所述的装置,其中,
所述启动单元,适于从所述插件的配置文件中获取所述实现特定功能的组件的内容;
以及适于自定义ClassLoader方法;由所述自定义ClassLoader方法根据所述实现特定功能的组件的内容获取并加载所述实现特定功能的组件的Class对象。
15.如权利要求12所述的装置,其中,
所述配置单元,适于利用所述Android程序的AndroidManifest.xml文件中的标签预留一个或多个Service组件,为预留的每个Service组件声明一个进程;和/或,适于利用所述Android程序的AndroidManifest.xml文件中的标签预留一个或多个ContentProvider组件,为预留的每个ContentProvider组件声明一个进程。
16.如权利要求12所述的装置,其中,当所述实现特定功能的组件为Service组件时,所述启动单元,适于通过context.startService方法启动所述可用进程,使得所述可用进程对应的Service组件在该进程中运行。
17.如权利要求12所述的装置,其中,
所述配置单元,进一步适于在所述Android程序的配置文件中实时记录更新所述Android程序的各进程的进程信息。
18.如权利要求17所述的装置,其中,所述进程信息包括以下信息中的一个或多个:
进程编号、进程状态、进程启动/修改状态的时间、进程对应的组件名、进程的ID标识、进程中运行各组件的数量。
19.如权利要求18所述的装置,其中,
所述查找单元,进一步适于遍历所述Android程序的所有进程,根据各进程的进程信息,判断是否存在已分配给所述实现特定功能的组件的进程;是则,直接通知所述启动单元,不再执行所述从预留的组件所声明的进程中找到一个可用进程的操作;
所述启动单元,适于令所述实现特定功能的组件在该进程中运行。
20.如权利要求19所述的装置,其中,
所述查找单元,适于遍历所有预留的组件所声明的进程,根据各进程的进程信息,判断是否存在闲置进程;如果存在一个闲置进程,则将该闲置进程作为可用进程;如果存在多个闲置进程,则选择其中最早启动的进程作为可用进程。
21.如权利要求20所述的装置,其中,
所述查找单元,进一步适于当不存在闲置进程时,强制回收最早启动的预留的组件所声明的进程,重新创建该进程作为可用进程。
22.如权利要求20所述的装置,其中,
所述查找单元,适于遍历所有预留的组件所声明的进程,判断是否存在处于未启动状态的进程,是则强制回收该进程,重新创建该进程作为所述闲置进程;否则判断是否存在处于停止状态的进程,是则强制回收该进程,重新创建该进程作为所述闲置进程;否则判断是否存在处于暂停状态且距离上次启动已超过指定时间的进程,是则强制回收该进程,重新创建该进程作为所述闲置进程;否则判断是否存在处于启动状态且距离上次使用Activity组件、Service组件、ContentProvider组件和Binder组件均已超过指定时间的进程,是则强制回收该进程,重新创建该进程作为所述闲置进程。