CN104750553B - 应用运行方法和装置 - Google Patents
应用运行方法和装置 Download PDFInfo
- Publication number
- CN104750553B CN104750553B CN201310746937.9A CN201310746937A CN104750553B CN 104750553 B CN104750553 B CN 104750553B CN 201310746937 A CN201310746937 A CN 201310746937A CN 104750553 B CN104750553 B CN 104750553B
- Authority
- CN
- China
- Prior art keywords
- application
- independent process
- parameter
- host
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明公开了一种应用运行方法和装置,属于计算机技术领域。所述方法包括:接收用于启动客户端中的一个应用的触发信号,根据触发信号创建应用对应的独立进程,通过创建的独立进程检测客户端中是否存在正在运行的应用的启动参数与该应用的启动参数相同,若检测结果为客户端中存在正在运行的应用的启动参数与该应用的启动参数相同,则通过正在运行的应用所对应的宿主独立进程运行该应用,且结束创建的独立进程。本发明解决了现有技术中因每个应用都以独立进程的形式运行,而导致系统开销巨大而且浪费系统资源的问题;达到了减少系统中运行的独立进程的数量,从而减小系统开销和节约系统资源的效果。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种应用运行方法和装置。
背景技术
为了满足用户各式各样的需求,一个客户端往往需要支持多个应用运行。比如,团队语音工具就能够同时支持娱乐、群体互动、游戏、交友、竞技和活动等多种类型的应用。
由于一个客户端需要支持的应用非常多,如果将这些应用直接嵌入客户端中,也即将这些应用加载于客户端中与客户端一起运行,那么当其中某一应用发生崩溃时,会导致整个客户端也随之崩溃。为了防止上述问题的发生,可以采用分离进程的技术使得同一个客户端中的不同的应用各自以独立进程的形式运行。这样,如果某一应用在运行过程中发生崩溃,也不会影响到其它应用的正常运行,更不会导致整个客户端的崩溃。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:采用分离进程的技术之后,由于每个应用都是以独立进程的形式运行,这对系统的计算和处理能力要求很高,导致系统开销巨大而且浪费系统资源。
发明内容
为了解决现有技术中因每个应用都以独立进程的形式运行,而导致系统开销巨大而且浪费系统资源的问题,本发明实施例提供了一种应用运行方法和装置。所述技术方案如下:
第一方面,提供了一种应用运行方法,用于包括至少两个应用的客户端中,所述方法包括:
接收用于启动所述客户端中的一个应用的触发信号;
根据所述触发信号创建所述应用对应的独立进程;
通过创建的所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同;
若检测结果为所述客户端中存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过所述正在运行的应用所对应的宿主独立进程运行所述应用,且结束创建的所述独立进程。
在第一方面的第一种可能的实施方式中,所述通过所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同之前,还包括:
设置所述客户端中崩溃率属于同一范围的不同应用具有相同的启动参数。
结合第一方面,在第二种可能的实施方式中,所述通过所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同之后,还包括:
若检测结果为所述客户端中不存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过创建的所述独立进程运行所述应用。
结合第一方面,在第三种可能的实施方式中,所述通过所述正在运行的应用所对应的宿主独立进程运行所述应用,包括:
通过创建的所述独立进程将包括所述应用的启动参数的启动命令行发送给所述宿主独立进程;
通过所述宿主独立进程接收所述启动命令行;
通过所述宿主独立进程根据所述启动命令行确定所述应用的类型;
通过所述宿主独立进程根据所述应用的类型加载已添加至所述宿主独立进程自身的内存地址空间的动态链接库中相应的模块运行所述应用,所述动态链接库包含有至少一个所述模块,每个所述模块包含有属于同一类型的应用的逻辑代码。
结合第一方面的第三种可能的实施方式,在第四种可能的实施方式中,所述通过所述宿主独立进程接收创建的所述独立进程发送的所述应用的启动命令行之后,还包括:
通过所述宿主独立进程将所述应用的启动命令行存储至所述宿主独立进程自身的线程管理器中;
通过所述宿主独立进程每隔预定时间间隔检测所述线程管理器中是否存在未处理的所述应用的启动命令行;
若检测结果为存在所述未处理的所述应用的启动命令行,则通过所述宿主独立进程读取所述未处理的所述应用的启动命令行。
结合第一方面的第二种可能的实施方式,在第五种可能的实施方式中,所述通过创建的所述独立进程运行所述应用,包括:
将动态链接库添加至创建的所述独立进程的内存地址空间,所述动态链接库包含有至少一个模块,每个所述模块包含有属于同一类型的应用的逻辑代码;
通过创建的所述独立进程根据包括所述应用的启动参数的启动命令行确定所述应用的类型;
通过创建的所述独立进程根据所述应用的类型加载所述动态链接库中相应的所述模块运行所述应用。
第二方面,提供了一种应用运行装置,用于包括至少两个应用的客户端中,所述装置包括:
信号接收模块,用于接收用于启动所述客户端中的一个应用的触发信号;
进程创建模块,用于根据所述触发信号创建所述应用对应的独立进程;
参数检测模块,用于通过创建的所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同;
宿主运行模块,用于若检测结果为所述客户端中存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过所述正在运行的应用所对应的宿主独立进程运行所述应用,且结束创建的所述独立进程。
在第二方面的第一种可能的实施方式中,所述装置还包括:
参数设置模块,用于设置所述客户端中崩溃率属于同一范围的不同应用具有相同的启动参数。
结合第二方面,在第二种可能的实施方式中,所述装置还包括:
进程运行模块,用于若检测结果为所述客户端中不存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过创建的所述独立进程运行所述应用。
结合第二方面,在第三种可能的实施方式中,所述宿主运行模块,包括:命令行发送单元、命令行接收单元、类型判断单元和模块加载单元;
所述命令行发送单元,用于通过创建的所述独立进程将包括所述应用的启动参数的启动命令行发送给所述宿主独立进程;
所述命令行接收单元,用于通过所述宿主独立进程接收所述启动命令行;
所述类型判断单元,用于通过所述宿主独立进程根据所述启动命令行确定所述应用的类型;
所述模块加载单元,用于通过所述宿主独立进程根据所述应用的类型加载已添加至所述宿主独立进程自身的内存地址空间的动态链接库中相应的模块运行所述应用,所述动态链接库包含有至少一个所述模块,每个所述模块包含有属于同一类型的应用的逻辑代码。
结合第二方面的第三种可能的实施方式,在第四种可能的实施方式中,所述宿主运行模块,还包括:命令行存储单元、命令行检测单元和命令行读取单元;
所述命令行存储单元,用于通过所述宿主独立进程将所述应用的启动命令行存储至所述宿主独立进程自身的线程管理器中;
所述命令行检测单元,用于通过所述宿主独立进程每隔预定时间间隔检测所述线程管理器中是否存在未处理的所述应用的启动命令行;
所述命令行读取单元,用于若检测结果为存在所述未处理的所述应用的启动命令行,则通过所述宿主独立进程读取所述未处理的所述应用的启动命令行。
结合第二方面的第二种可能的实施方式,在第五种可能的实施方式中,所述进程运行模块,包括:动态库添加单元、类型确定单元和应用运行单元;
所述动态库添加单元,用于将动态链接库添加至创建的所述独立进程的内存地址空间,所述动态链接库包含有至少一个模块,每个所述模块包含有属于同一类型的应用的逻辑代码;
所述类型确定单元,用于通过创建的所述独立进程根据包括所述应用的启动参数的启动命令行确定所述应用的类型;
所述应用运行单元,用于通过创建的所述独立进程根据所述应用的类型加载所述动态链接库中相应的所述模块运行所述应用。
本发明实施例提供的技术方案带来的有益效果是:
通过接收到用于启动客户端中的一个应用的触发信号后,根据该触发信号创建应用对应的独立进程,通过创建的独立进程检测客户端中是否存在正在运行的应用的启动参数与该应用的启动参数相同;若检测结果为存在正在运行的应用的启动参数与该应用的启动参数相同,则通过正在运行的应用对应的宿主独立进程运行该应用,且结束创建的独立进程;解决了现有技术中因每个应用都以独立进程的形式运行,而导致系统开销巨大而且浪费系统资源的问题;达到了在不影响应用正常运行的前提下,减少系统中运行的独立进程的数量,从而减小系统开销和节约系统资源的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例提供的应用运行方法的方法流程图;
图2A是本发明另一实施例提供的应用运行方法的方法流程图;
图2B是本发明另一实施例提供的应用运行方法所涉及的步骤206的子步骤的方法流程图;
图3是本发明一个实施例提供的应用运行装置的结构方框图;
图4是本发明另一实施例提供的应用运行装置的结构方框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
发明人提供了一种应用运行机制,既不会因个别应用在运行过程中发生崩溃而导致整个客户端的崩溃,也不会因每个应用均以独立进程的形式运行而导致系统开销巨大且浪费系统资源。具体来讲,在一种最简单的实施方式中,将成熟版本的应用,也即在运行过程中发生崩溃的几率极小的应用放置于一个独立进程中运行;而将实验版本的应用,也即在运行过程中发生崩溃的几率较大的应用放置于另一个独立进程中运行。这样,两个独立进程相互独立,互不影响。一方面,当其中一个独立进程中的应用发生崩溃时,只会导致该应用所在的独立进程崩溃,而不会导致另一个独立进程崩溃,更不会导致整个客户端的崩溃。另一方面,在这种实施方式中,系统最多只需处理两个独立进程,系统开销较小且节约系统资源。下面,将结合具体的实施例对发明人提供的这种应用运行机制进行详细介绍和说明。
首先需要说明的是,在本发明各个实施例中,所涉及的终端可以是智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
终端中运行有包括至少两个应用的客户端,比如团队语音工具。在下述各方法实施例中,各步骤的执行主体均为客户端。
请参考图1,其示出了本发明一个实施例提供的应用运行方法的方法流程图,该应用运行方法用于终端中。该应用运行方法包括如下步骤:
步骤102,接收用于启动客户端中的一个应用的触发信号。
步骤104,根据触发信号创建应用对应的独立进程。
步骤106,通过创建的独立进程检测客户端中是否存在正在运行的应用的启动参数与应用的启动参数相同。
步骤108,若检测结果为客户端中存在正在运行的应用的启动参数与应用的启动参数相同,则通过正在运行的应用所对应的宿主独立进程运行应用,且结束创建的独立进程。
综上所述,本实施例提供的应用运行方法,客户端通过接收到用于启动客户端中的一个应用的触发信号后,根据该触发信号创建应用对应的独立进程,通过创建的独立进程检测客户端中是否存在正在运行的应用的启动参数与该应用的启动参数相同;若检测结果为存在正在运行的应用的启动参数与该应用的启动参数相同,则通过正在运行的应用对应的宿主独立进程运行该应用,且结束创建的独立进程;解决了现有技术中因每个应用都以独立进程的形式运行,而导致系统开销巨大而且浪费系统资源的问题;达到了在不影响应用正常运行的前提下,减少系统中运行的独立进程的数量,从而减小系统开销和节约系统资源的效果。
请参考图2A,其示出了本发明另一实施例提供的应用运行方法的方法流程图,该应用运行方法用于终端中。该应用运行方法包括如下步骤:
步骤201,设置客户端中崩溃率属于同一范围的不同应用具有相同的启动参数。
预先设置客户端中崩溃率属于同一范围的不同应用具有相同的启动参数。客户端中包含有至少两个应用,应用可以是DLL(Dynamic Link Library,动态链接库)、Flash(动画)或者Web(网页)等类型的应用。研发人员首先预计各个应用的崩溃率,然后根据各个应用的崩溃率给每个应用设置启动参数。比如,给成熟版本的应用,也即在运行过程中发生崩溃的几率极小的应用设置同一种启动参数;而给实验版本的应用,也即在运行过程中发生崩溃的几率较大的应用设置另一种启动参数。
在本实施例中,假设一个Web类型的游戏应用、一个Flash类型的互动应用以及一个DLL类型的交友应用为成熟版本的应用,预先给该3个应用设置同一启动参数yyim1。另外,存在一个Flash类型的游戏应用为实验版本的应用,预先给该应用设置另一启动参数yyim2。
步骤202,接收用于启动客户端中的一个应用的触发信号。
客户端接收用于启动客户端中的一个应用的触发信号。触发信号可以是由用户通过点击应用的链接、按钮或者图标而产生的。
以客户端为团队语音工具为例,用户如需打开团队语音工具中的某一应用,可以打开团队语音工具的应用中心,然后点击该应用的链接、按钮或者图标而产生用于启动该应用的触发信号。在本实施例中,假设触发启动的应用为Web类型的游戏应用。
步骤203,根据触发信号创建应用对应的独立进程。
每个应用都各自对应一个独立进程,客户端接收到用于启动客户端中的一个应用的触发信号后,根据触发信号创建应用对应的独立进程。
在本实施例中,假设该独立进程为yyexternal.exe进程。团队语音工具接收到用于启动一个Web类型的游戏应用的触发信号之后,创建该Web类型的游戏应用对应的yyexternal.exe进程。
步骤204,通过创建的独立进程检测客户端中是否存在正在运行的应用的启动参数与应用的启动参数相同。
客户端通过创建的独立进程检测客户端中是否存在正在运行的应用的启动参数与应用的启动参数相同。正要启动的应用所对应的独立进程中存在一个预定函数,该预定函数用于检测当前客户端中是否存在正在运行的独立进程,且该正在运行的独立进程中加载运行的应用的启动参数与正要启动的应用的启动参数相同。
在本实施例中,预定函数为CreateMutex函数。CreateMutex函数能够调用应用的启动参数,检测当前团队语音工具中是否存在正在运行的yyexternal.exe进程,且该正在运行的yyexternal.exe进程中加载运行的应用的启动参数与Web类型的游戏应用的启动参数yyim1相同。
步骤205,若检测结果为客户端中不存在正在运行的应用的启动参数与应用的启动参数相同,则通过创建的独立进程运行应用。
若检测结果为客户端中不存在正在运行的应用的启动参数与应用的启动参数相同,则客户端通过创建的独立进程运行应用。
在本实施例中,当检测发现团队语音工具中不存在正在运行的yyexternal.exe进程,且该正在运行的yyexternal.exe进程中加载运行的应用的启动参数与Web类型的游戏应用的启动参数yyim1相同时,团队语音工具通过Web类型的游戏应用自身所对应的yyexternal.exe进程运行该游戏应用。
具体来讲,本步骤可以包括如下几个子步骤:
第一,将动态链接库添加至创建的独立进程的内存地址空间。
客户端将动态链接库添加至创建的独立进程的内存地址空间。动态链接库包含有至少一个模块,每个模块包含有属于同一类型的应用的逻辑代码。由于在独立进程成功创建之后,该独立进程在内存中将会占有自己的内存地址空间,此时客户端将包含有应用的逻辑代码的动态链接库添加至独立进程的内存地址空间。优选地,考虑到其它独立进程也有可能需要使用该动态链接库,通常会选择动态链接库的副本进行添加。
在本实施例中,假设该动态链接库为yysdkcontainer.dll,其包含了所有应用的逻辑代码,包括上述举例的一个Web类型的游戏应用、一个Flash类型的互动应用、一个DLL类型的交友应用以及一个Flash类型的游戏应用。团队语音工具将yysdkcontainer.dll的副本添加至Web类型的游戏应用自身所对应的yyexternal.exe进程的内存地址空间。
第二,通过创建的独立进程根据包括应用的启动参数的启动命令行确定应用的类型。
在上文中已经介绍,应用可以是DLL、Flash或者Web等类型的应用,客户端通过创建的独立进程根据应用的启动命令行确定应用的类型。各个应用的启动命令行中包含有用于启动该应用的各种参数,其中也包括上文介绍的启动参数。客户端通过创建的独立进程解析应用的启动命令行,然后确定应用的类型。
第三,通过创建的独立进程根据应用的类型加载动态链接库中相应的模块运行应用。
客户端通过创建的独立进程根据应用的类型加载动态链接库中相应的模块运行应用。动态链接库是一个包含可由多个独立进程同时使用的代码和数据的库。动态链接库包含有至少一个模块,每个模块包含有属于同一类型的应用的逻辑代码。客户端通过创建的独立进程从动态链接库中选取与应用的类型相对应的模块,进而读取应用的逻辑代码然后运行该应用。
具体地,由于动态链接库根据应用的类型的不同划分不同的模块,比如所有Web类型的应用共用一个模块、所有Flash类型的应用共用一个模块、所有DLL类型的应用共用一个模块。这样有助于相同类型的应用之间实现代码的重用,节约内存空间。所以,独立进程从动态链接库中首先找到应用所对应的模块,然后从该应用所对应的模块中读取应用的逻辑代码。
进一步地,在本步骤之后还可以给创建后的独立进程添加宿主标识,宿主标识添加成功之后的独立进程即为宿主独立进程。
步骤206,若检测结果为客户端中存在正在运行的应用的启动参数与应用的启动参数相同,则通过正在运行的应用所对应的宿主独立进程运行应用,且结束创建的独立进程。
若检测结果为客户端中存在正在运行的应用的启动参数与应用的启动参数相同,则客户端通过正在运行的应用所对应的宿主独立进程运行应用,且结束创建的独立进程。
在本实施例中,假如检测发现团队语音工具中存在某一正在运行的应用的启动参数与Web类型的游戏应用的启动参数yyim1相同,则团队语音工具通过该正在运行的应用所对应的宿主独立进程yyexternal.exe进程进行该Web类型的游戏应用,且结束Web类型的游戏应用自身所对应的yyexternal.exe进程。比如,检测发现Flash类型的互动应用正在运行,由于其启动参数也为yyim1,所以为了减小系统开销,节约系统资源,将Web类型的游戏应用也添加至宿主独立进程yyexternal.exe进程中运行,而不用每个应用都各自占用一个yyexternal.exe进程。
具体来讲,请结合参考图2B,本步骤可以包括如下几个子步骤:
步骤206a,通过创建的独立进程将包括应用的启动参数的启动命令行发送给宿主独立进程。
客户端通过创建的独立进程将包括应用的启动参数的启动命令行发送给宿主独立进程。具体地,应用首先向客户端中的预定进程进行注册;注册成功之后,应用自身所对应的独立进程将应用的启动命令行发送给宿主独立进程。之后,应用自身所对应的独立进程就结束运行。
在本实施例中,假设团队语音工具中的预定进程为yyplatform.exe,yyplatform.exe为连接团队语音工具与各个应用之间的桥梁。Web类型的游戏应用向yyplatform.exe进行注册成功之后,Web类型的游戏应用自身所对应的yyexternal.exe进程将应用的启动命令行发送给宿主独立进程yyexternal.exe进程。之后,Web类型的游戏应用自身所对应的yyexternal.exe进程就结束运行。
步骤206b,通过宿主独立进程接收启动命令行。
客户端通过宿主独立进程接收启动命令行。
在本实施例中,宿主独立进程yyexternal.exe进程接收启动命令行。
步骤206c,通过宿主独立进程将应用的启动命令行存储至宿主独立进程自身的线程管理器中。
客户端通过宿主独立进程将应用的启动命令行存储至宿主独立进程自身的线程管理器中。线程管理器用于管理同一进程中的多个线程,每个线程支持运行一个应用,进而实现不同线程之间的切换,展示同一进程中的不同应用。
在本实施例中,宿主独立进程yyexternal.exe进程将Web类型的游戏应用的启动命令行存储至自身的线程管理器中。
步骤206d,通过宿主独立进程每隔预定时间间隔检测线程管理器中是否存在未处理的应用的启动命令行。
宿主独立进程可以预先设定定时器,每隔预定时间间隔检测线程管理器中是否存在未处理的应用的启动命令行。
在本实施例中,宿主独立进程yyexternal.exe进程检测发现存在未处理的启动命令行,也即Web类型的游戏应用的启动命令行。
步骤206e,若检测结果为存在未处理的应用的启动命令行,则通过宿主独立进程读取未处理的应用的启动命令行。
当检测发现存在未处理的应用的启动命令行,宿主独立进程读取未处理的应用的启动命令行。在本实施例中,宿主独立进程yyexternal.exe进程读取Web类型的游戏应用的启动命令行。
步骤206f,通过宿主独立进程根据启动命令行确定应用的类型。
步骤206g,通过宿主独立进程根据应用的类型加载已添加至宿主独立进程自身的内存地址空间的动态链接库中相应的模块运行应用。
步骤206f至步骤206g与上述步骤205中的第二和第三两个步骤相同或者相似,不再赘述。
需要说明的是,当客户端为使用C++编程语言开发的应用程序时,由于Web类型的应用通常是使用Java Script编程语言进行开发的,而Flash类型的应用通常是使用ActionScript编程语言进行开发的,所以在满足上述条件的情况下,客户端在添加动态链接库至独立进程的内存地址空间时,还需一并添加一个用于实现客户端与Web类型的应用或者Flash类型的应用之间进行通信的动态链接库。在本实施例中,实现团队语音工具与Web类型的应用或者Flash类型的应用之间进行通信的动态链接库可以是yyiecontainer.dll。
还需要说明的是,客户端中可以同时运行两个或者多个宿主独立进程,各个宿主独立进程之间相互独立互不影响,且每个宿主独立进程中可以同时加载运行至少一个应用。比如,在本实施例中,当接收到用于触发启动实验版本的Flash类型的游戏应用时,由于其所对应的启动参数为yyim2。因此若检测发现客户端中不存在正在运行的应用的启动参数与yyim2相同,则通过该实验版本的Flash类型的游戏应用自身所对应的yyexternal.exe进程运行该应用,然后将该yyexternal.exe进程标记为宿主独立进程。
综上所述,本实施例提供的应用运行方法,客户端通过接收到用于启动客户端中的一个应用的触发信号后,根据该触发信号创建应用对应的独立进程,通过创建的独立进程检测客户端中是否存在正在运行的应用的启动参数与该应用的启动参数相同;若检测结果为存在正在运行的应用的启动参数与该应用的启动参数相同,则通过正在运行的应用对应的宿主独立进程运行该应用,且结束创建的独立进程;解决了现有技术中因每个应用都以独立进程的形式运行,而导致系统开销巨大而且浪费系统资源的问题;达到了在不影响应用正常运行的前提下,减少系统中运行的独立进程的数量,从而减小系统开销和节约系统资源的效果。另外,通过宿主独立进程中的多个线程同时加载运行多个具有相同的启动参数的应用,既满足了多个应用的同时运行,又没有增加多余的独立进程。
下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
请参考图3,其示出了本发明一个实施例提供的应用运行装置的结构方框图,该应用运行装置用于包括至少两个应用的客户端中。该应用运行装置可以通过软件、硬件或者两者的结合实现成为终端的一部分,该应用运行装置包括:信号接收模块310、进程创建模块320、参数检测模块330和宿主运行模块340。
信号接收模块310,用于接收用于启动所述客户端中的一个应用的触发信号。
进程创建模块320,用于根据所述触发信号创建所述应用对应的独立进程。
参数检测模块330,用于通过创建的所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同。
宿主运行模块340,用于若检测结果为所述客户端中存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过所述正在运行的应用所对应的宿主独立进程运行所述应用,且结束创建的所述独立进程。
综上所述,本实施例提供的应用运行装置,客户端通过接收到用于启动客户端中的一个应用的触发信号后,根据该触发信号创建应用对应的独立进程,通过创建的独立进程检测客户端中是否存在正在运行的应用的启动参数与该应用的启动参数相同;若检测结果为存在正在运行的应用的启动参数与该应用的启动参数相同,则通过正在运行的应用对应的宿主独立进程运行该应用,且结束创建的独立进程;解决了现有技术中因每个应用都以独立进程的形式运行,而导致系统开销巨大而且浪费系统资源的问题;达到了在不影响应用正常运行的前提下,减少系统中运行的独立进程的数量,从而减小系统开销和节约系统资源的效果。
请参考图4,其示出了本发明另一实施例提供的应用运行装置的结构方框图,该应用运行装置用于包括至少两个应用的客户端中。该应用运行装置可以通过软件、硬件或者两者的结合实现成为终端的一部分,该应用运行装置包括:参数设置模块302、信号接收模块310、进程创建模块320、进程运行模块332、参数检测模块330和宿主运行模块340。
参数设置模块302,用于设置所述客户端中崩溃率属于同一范围的不同应用具有相同的启动参数。
信号接收模块310,用于接收用于启动所述客户端中的一个应用的触发信号。
进程创建模块320,用于根据所述触发信号创建所述应用对应的独立进程。
参数检测模块330,用于通过创建的所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同。
进程运行模块332,用于若检测结果为所述客户端中不存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过创建的所述独立进程运行所述应用。
具体来讲,所述进程运行模块332,包括:动态库添加单元332a、类型确定单元332b和应用运行单元332c。
所述动态库添加单元332a,用于将动态链接库添加至创建的所述独立进程的内存地址空间,所述动态链接库包含有至少一个模块,每个所述模块包含有属于同一类型的应用的逻辑代码。
所述类型确定单元332b,用于通过创建的所述独立进程根据包括所述应用的启动参数的启动命令行确定所述应用的类型。
所述应用运行单元332c,用于通过创建的所述独立进程根据所述应用的类型加载所述动态链接库中相应的所述模块运行所述应用。
宿主运行模块340,用于若检测结果为所述客户端中存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过所述正在运行的应用所对应的宿主独立进程运行所述应用,且结束创建的所述独立进程。
具体来讲,所述宿主运行模块340,包括:命令行发送单元340a、命令行接收单元340b、类型判断单元340c、模块加载单元340d和进程结束单元340e。
所述命令行发送单元340a,用于通过创建的所述独立进程将包括所述应用的启动参数的启动命令行发送给所述宿主独立进程。
所述命令行接收单元340b,用于通过所述宿主独立进程接收所述启动命令行。
所述类型判断单元340c,用于通过所述宿主独立进程根据所述启动命令行确定所述应用的类型。
所述模块加载单元340d,用于通过所述宿主独立进程根据所述应用的类型加载已添加至所述宿主独立进程自身的内存地址空间的动态链接库中相应的模块运行所述应用,所述动态链接库包含有至少一个所述模块,每个所述模块包含有属于同一类型的应用的逻辑代码。
所述进程结束单元340e,用于结束创建的所述独立进程。
所述宿主运行模块340,还包括:命令行存储单元340f、命令行检测单元340g和命令行读取单元340h。
所述命令行存储单元340f,用于通过所述宿主独立进程将所述应用的启动命令行存储至所述宿主独立进程自身的线程管理器中。
所述命令行检测单元340g,用于通过所述宿主独立进程每隔预定时间间隔检测所述线程管理器中是否存在未处理的所述应用的启动命令行。
所述命令行读取单元340h,用于若检测结果为存在所述未处理的所述应用的启动命令行,则通过所述宿主独立进程读取所述未处理的所述应用的启动命令行。
综上所述,本实施例提供的应用运行装置,客户端通过接收到用于启动客户端中的一个应用的触发信号后,根据该触发信号创建应用对应的独立进程,通过创建的独立进程检测客户端中是否存在正在运行的应用的启动参数与该应用的启动参数相同;若检测结果为存在正在运行的应用的启动参数与该应用的启动参数相同,则通过正在运行的应用对应的宿主独立进程运行该应用,且结束创建的独立进程;解决了现有技术中因每个应用都以独立进程的形式运行,而导致系统开销巨大而且浪费系统资源的问题;达到了在不影响应用正常运行的前提下,减少系统中运行的独立进程的数量,从而减小系统开销和节约系统资源的效果。另外,通过宿主独立进程中的多个线程同时加载运行多个具有相同的启动参数的应用,既满足了多个应用的同时运行,又没有增加多余的独立进程。
需要说明的是:上述实施例提供的应用运行装置在运行应用时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的应用运行装置与应用运行方法的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”(“a”、“an”、“the”)旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种应用运行方法,其特征在于,用于包括至少两个应用的客户端中,所述方法包括:
接收用于启动所述客户端中的一个应用的触发信号;
根据所述触发信号创建所述应用对应的独立进程;
通过创建的所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同;
若检测结果为所述客户端中存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过所述正在运行的应用所对应的宿主独立进程运行所述应用,且结束创建的所述独立进程,
所述通过所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同之前,还包括:
设置所述客户端中崩溃率属于同一范围的不同应用具有相同的启动参数。
2.根据权利要求1所述的方法,其特征在于,所述通过所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同之后,还包括:
若检测结果为所述客户端中不存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过创建的所述独立进程运行所述应用。
3.根据权利要求1所述的方法,其特征在于,所述通过所述正在运行的应用所对应的宿主独立进程运行所述应用,包括:
通过创建的所述独立进程将包括所述应用的启动参数的启动命令行发送给所述宿主独立进程;
通过所述宿主独立进程接收所述启动命令行;
通过所述宿主独立进程根据所述启动命令行确定所述应用的类型;
通过所述宿主独立进程根据所述应用的类型加载已添加至所述宿主独立进程自身的内存地址空间的动态链接库中相应的模块运行所述应用,所述动态链接库包含有至少一个所述模块,每个所述模块包含有属于同一类型的应用的逻辑代码。
4.根据权利要求3所述的方法,其特征在于,所述通过所述宿主独立进程接收创建的所述独立进程发送的所述应用的启动命令行之后,还包括:
通过所述宿主独立进程将所述应用的启动命令行存储至所述宿主独立进程自身的线程管理器中;
通过所述宿主独立进程每隔预定时间间隔检测所述线程管理器中是否存在未处理的所述应用的启动命令行;
若检测结果为存在所述未处理的所述应用的启动命令行,则通过所述宿主独立进程读取所述未处理的所述应用的启动命令行。
5.根据权利要求2所述的方法,其特征在于,所述通过创建的所述独立进程运行所述应用,包括:
将动态链接库添加至创建的所述独立进程的内存地址空间,所述动态链接库包含有至少一个模块,每个所述模块包含有属于同一类型的应用的逻辑代码;
通过创建的所述独立进程根据包括所述应用的启动参数的启动命令行确定所述应用的类型;
通过创建的所述独立进程根据所述应用的类型加载所述动态链接库中相应的所述模块运行所述应用。
6.一种应用运行装置,其特征在于,用于包括至少两个应用的客户端中,所述装置包括:
信号接收模块,用于接收用于启动所述客户端中的一个应用的触发信号;
进程创建模块,用于根据所述触发信号创建所述应用对应的独立进程;
参数检测模块,用于通过创建的所述独立进程检测所述客户端中是否存在正在运行的应用的启动参数与所述应用的启动参数相同;
宿主运行模块,用于若检测结果为所述客户端中存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过所述正在运行的应用所对应的宿主独立进程运行所述应用,且结束创建的所述独立进程,
所述装置还包括:
参数设置模块,用于设置所述客户端中崩溃率属于同一范围的不同应用具有相同的启动参数。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
进程运行模块,用于若检测结果为所述客户端中不存在正在运行的应用的启动参数与所述应用的启动参数相同,则通过创建的所述独立进程运行所述应用。
8.根据权利要求6所述的装置,其特征在于,所述宿主运行模块,包括:命令行发送单元、命令行接收单元、类型判断单元和模块加载单元;
所述命令行发送单元,用于通过创建的所述独立进程将包括所述应用的启动参数的启动命令行发送给所述宿主独立进程;
所述命令行接收单元,用于通过所述宿主独立进程接收所述启动命令行;
所述类型判断单元,用于通过所述宿主独立进程根据所述启动命令行确定所述应用的类型;
所述模块加载单元,用于通过所述宿主独立进程根据所述应用的类型加载已添加至所述宿主独立进程自身的内存地址空间的动态链接库中相应的模块运行所述应用,所述动态链接库包含有至少一个所述模块,每个所述模块包含有属于同一类型的应用的逻辑代码。
9.根据权利要求8所述的装置,其特征在于,所述宿主运行模块,还包括:命令行存储单元、命令行检测单元和命令行读取单元;
所述命令行存储单元,用于通过所述宿主独立进程将所述应用的启动命令行存储至所述宿主独立进程自身的线程管理器中;
所述命令行检测单元,用于通过所述宿主独立进程每隔预定时间间隔检测所述线程管理器中是否存在未处理的所述应用的启动命令行;
所述命令行读取单元,用于若检测结果为存在所述未处理的所述应用的启动命令行,则通过所述宿主独立进程读取所述未处理的所述应用的启动命令行。
10.根据权利要求7所述的装置,其特征在于,所述进程运行模块,包括:动态库添加单元、类型确定单元和应用运行单元;
所述动态库添加单元,用于将动态链接库添加至创建的所述独立进程的内存地址空间,所述动态链接库包含有至少一个模块,每个所述模块包含有属于同一类型的应用的逻辑代码;
所述类型确定单元,用于通过创建的所述独立进程根据包括所述应用的启动参数的启动命令行确定所述应用的类型;
所述应用运行单元,用于通过创建的所述独立进程根据所述应用的类型加载所述动态链接库中相应的所述模块运行所述应用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746937.9A CN104750553B (zh) | 2013-12-30 | 2013-12-30 | 应用运行方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746937.9A CN104750553B (zh) | 2013-12-30 | 2013-12-30 | 应用运行方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104750553A CN104750553A (zh) | 2015-07-01 |
CN104750553B true CN104750553B (zh) | 2019-03-15 |
Family
ID=53590296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310746937.9A Active CN104750553B (zh) | 2013-12-30 | 2013-12-30 | 应用运行方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104750553B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121572B (zh) * | 2016-11-28 | 2021-02-12 | 华为技术有限公司 | 一种web应用启动方法及装置 |
CN108958824A (zh) * | 2017-05-18 | 2018-12-07 | 龙芯中科技术有限公司 | 应用程序的启动方法、装置、电子设备及存储介质 |
CN111782380B (zh) * | 2020-08-06 | 2023-03-17 | Oppo(重庆)智能科技有限公司 | 应用运行控制方法、装置、电子装置及存储介质 |
CN112769900B (zh) * | 2020-12-22 | 2023-04-25 | 中冶赛迪信息技术(重庆)有限公司 | 一种数据分发方法、系统、介质及电子终端 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722092A (zh) * | 2004-04-30 | 2006-01-18 | 微软公司 | Vex-虚拟扩展框架 |
CN101610316A (zh) * | 2009-07-24 | 2009-12-23 | 中兴通讯股份有限公司 | 手机应用程序的启动方法、装置和系统 |
CN101630272A (zh) * | 2009-08-19 | 2010-01-20 | 用友软件股份有限公司 | 进程调度方法和系统 |
CN103164322A (zh) * | 2013-04-15 | 2013-06-19 | 腾讯科技(深圳)有限公司 | 一种程序崩溃的签名方法和装置 |
CN103257887A (zh) * | 2012-02-16 | 2013-08-21 | 宇龙计算机通信科技(深圳)有限公司 | 终端和进程控制方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4803263B2 (ja) * | 2009-01-28 | 2011-10-26 | ブラザー工業株式会社 | ソフトウェアのインストール方法及びプログラム及び情報処理装置 |
-
2013
- 2013-12-30 CN CN201310746937.9A patent/CN104750553B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722092A (zh) * | 2004-04-30 | 2006-01-18 | 微软公司 | Vex-虚拟扩展框架 |
CN101610316A (zh) * | 2009-07-24 | 2009-12-23 | 中兴通讯股份有限公司 | 手机应用程序的启动方法、装置和系统 |
CN101630272A (zh) * | 2009-08-19 | 2010-01-20 | 用友软件股份有限公司 | 进程调度方法和系统 |
CN103257887A (zh) * | 2012-02-16 | 2013-08-21 | 宇龙计算机通信科技(深圳)有限公司 | 终端和进程控制方法 |
CN103164322A (zh) * | 2013-04-15 | 2013-06-19 | 腾讯科技(深圳)有限公司 | 一种程序崩溃的签名方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104750553A (zh) | 2015-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106127036B (zh) | 持续性和弹性的工作者进程 | |
CN109542758B (zh) | 应用程序容错能力测试方法、装置、计算机可读存储介质 | |
CN108536538A (zh) | 处理器核心调度方法、装置、终端及存储介质 | |
CN107203419A (zh) | 应用程序中的模块间调用方法、装置及系统 | |
CN104750553B (zh) | 应用运行方法和装置 | |
CN104243285B (zh) | 一种消息推送的方法以及服务器 | |
CN103678506B (zh) | 在浏览器中加载应用程序快捷方式的方法、装置和浏览器 | |
US20160283356A1 (en) | Event-driven automation testing for mobile devices | |
CN109243425A (zh) | 语音识别测试方法、装置、系统、计算机设备及存储介质 | |
CN109739505A (zh) | 一种用户界面的处理方法和装置 | |
CN108287647B (zh) | 一种应用运行方法及装置 | |
CN107766307B (zh) | 一种表单元素联动的方法和设备 | |
CN105847446B (zh) | 一种网络数据的获取方法、装置和系统 | |
CN107741902A (zh) | 程序应用检测方法及程序应用检测装置 | |
CN111464352A (zh) | 调用链路数据处理方法及装置 | |
CN110457621A (zh) | 一种混合应用的页面显示方法、装置及介质 | |
CN107996026A (zh) | 多操作系统多媒体编解码方法、装置及电子设备 | |
CN113553140A (zh) | 资源调度方法、设备及系统 | |
CN114244821B (zh) | 数据处理方法、装置、设备、电子设备和存储介质 | |
CN105872767A (zh) | 一种基于用户行为引导分享的方法和装置 | |
CN111813625B (zh) | 分布式服务器集群的健康检查方法及装置 | |
CN108920379A (zh) | 捕获lua代码异常的方法和装置 | |
CN104008043B (zh) | 跨终端测试方法、待测试端及测试端 | |
CN108418890A (zh) | 脸部特效资源生成方法、装置、系统及可读存储介质 | |
Park et al. | Self-adaptive middleware framework for internet of things |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 511446 Guangzhou City, Guangdong Province, Panyu District, South Village, Huambo Business District Wanda Plaza, block B1, floor 28 Applicant after: Guangzhou Huaduo Network Technology Co., Ltd. Address before: 510655, Guangzhou, Whampoa Avenue, No. 2, creative industrial park, building 3-08, Applicant before: Guangzhou Huaduo Network Technology Co., Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |