本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理方法和裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,安卓系統(tǒng)中無法實(shí)現(xiàn)對(duì)多個(gè)相同的安卓應(yīng)用的并行運(yùn)行,其原因是:每個(gè)安卓應(yīng)用在安裝在安卓系統(tǒng)中時(shí),該安卓應(yīng)用的安裝包中的配置文件中的配置信息將被注冊(cè)到安卓系統(tǒng)中,安卓系統(tǒng)通過這些注冊(cè)信息來獲知安卓應(yīng)用的存在以及運(yùn)行相關(guān)信息,在一個(gè)安卓應(yīng)用已安裝到安卓系統(tǒng)的基礎(chǔ)上,如果還想將該安卓應(yīng)用的分身應(yīng)用再次安裝到安卓系統(tǒng)中,安卓系統(tǒng)因已接收過相同的注冊(cè)信息而不能接納此分身應(yīng)用的注冊(cè),因此分身應(yīng)用對(duì)于安卓系統(tǒng)來說是未知的,進(jìn)而分身系統(tǒng)無法正常與安卓系統(tǒng)進(jìn)行交互,導(dǎo)致分身系統(tǒng)無法正常運(yùn)行。
然而,對(duì)多個(gè)相同的安卓應(yīng)用的并行運(yùn)行的需求在用戶群體中是存在的,常見的,用戶希望在自己的智能終端上通過不同的賬號(hào)登錄兩個(gè)QQ應(yīng)用,讓這兩個(gè)QQ應(yīng)用并行運(yùn)行,用戶可以根據(jù)自己的需求分別使用不同的QQ應(yīng)用來與不同社交圈的好友進(jìn)行聊天會(huì)話,符合很多應(yīng)用場(chǎng)景。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的安卓應(yīng)用的異步調(diào)用機(jī)制的處理方法和裝置。
依據(jù)本發(fā)明的一個(gè)方面,提供了一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理方法,其中,包括:
構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中,使得每個(gè)指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運(yùn)行;
對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作。
可選地,該方法進(jìn)一步包括:在安卓系統(tǒng)中預(yù)先聲明代理組件;
所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理包括:
監(jiān)聽安卓系統(tǒng)中的異步調(diào)用事件;
當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)生異步調(diào)用事件時(shí),攔截所述異步調(diào)用事件,判斷所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;
是則,將所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件替換為所述代理組件,記錄替換前所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息作為原始執(zhí)行消息,并在替換后放行所述異步調(diào)用事件;
否則,直接放行所述異步調(diào)用事件。
可選地,所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理還包括:
當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息時(shí),該執(zhí)行消息中的目標(biāo)組件為替換后的所述代理組件,所述代理組件接收該執(zhí)行消息。
可選地,該方法進(jìn)一步包括:在安卓系統(tǒng)中預(yù)先聲明適配于不同組件類型的預(yù)留進(jìn)程;
所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理還包括:
當(dāng)所述代理組件接收到安卓系統(tǒng)發(fā)出的執(zhí)行消息時(shí),查找所記錄的該執(zhí)行消息對(duì)應(yīng)的原始執(zhí)行消息;
選擇一個(gè)適配于所述原始執(zhí)行消息中的目標(biāo)組件所屬的組件類型的預(yù)留進(jìn)程;
將所述原始執(zhí)行消息發(fā)送至所選擇的預(yù)留進(jìn)程中,使得所述原始執(zhí)行消息中的目標(biāo)組件在所選擇的預(yù)留進(jìn)程中運(yùn)行。
可選地,所述監(jiān)聽安卓系統(tǒng)中的異步調(diào)用事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)生異步調(diào)用事件時(shí),攔截所述異步調(diào)用事件,判斷所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件包括:
監(jiān)聽安卓系統(tǒng)中調(diào)用用于獲取IntentSender對(duì)象的方法的事件;
當(dāng)監(jiān)聽到調(diào)用用于獲取IntentSender對(duì)象的方法的事件時(shí),攔截相應(yīng)的IntentSender對(duì)象,從所述IntentSender對(duì)象中提取Intent消息,判斷該Intent消息所指示的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件。
可選地,在所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理之前,該方法進(jìn)一步包括:獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊(cè)的組件的相關(guān)信息并保存至配置管理表中;
判斷該Intent消息所指示的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件包括:判斷該Intent消息中的目標(biāo)組件的相關(guān)信息是否匹配于所述配置管理表中記錄的組件的相關(guān)信息;是則,確定該Intent消息所指示的目標(biāo)組件是虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;否則不是。
可選地,所述獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊(cè)的組件的相關(guān)信息并保存至配置管理表中包括:
獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;
解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的組件的相關(guān)信息并保存至所述配置管理表中。
可選地,所述將所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件替換為所述代理組件,記錄替換前所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息作為原始執(zhí)行消息,并在替換后放行所述異步調(diào)用事件包括:
將所攔截的所述IntentSender對(duì)象中的Intent消息所指示的目標(biāo)組件替換為所述代理組件,并將從所述IntentSender對(duì)象中提取出的Intent消息作為原始Intent消息并記錄;
放行替換后的所述IntentSender對(duì)象,使得所述IntentSender對(duì)象被傳遞至相應(yīng)的處理方,相應(yīng)的處理方在預(yù)設(shè)時(shí)間激發(fā)安卓系統(tǒng)發(fā)出相應(yīng)的被替換后的Intent消息。
可選地,所述當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息時(shí),該執(zhí)行消息中的目標(biāo)組件為替換后的所述代理組件,所述代理組件接收該執(zhí)行消息包括:
當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出相應(yīng)地被替換后的Intent消息,該Intent消息所指示的目標(biāo)組件為所述代理組件,所述代理組件接收該Intent消息。
可選地,所述當(dāng)所述代理組件接收到安卓系統(tǒng)發(fā)出的執(zhí)行消息時(shí),查找所記錄的該執(zhí)行消息對(duì)應(yīng)的原始執(zhí)行消息包括:
當(dāng)所述代理組件接收到所述Intent消息時(shí),查找所記錄的該Intent消息對(duì)應(yīng)的原始Intent消息;
所述將所述原始執(zhí)行消息發(fā)送至所選擇的預(yù)留進(jìn)程中,使得所述原始執(zhí)行消息中的目標(biāo)組件在所選擇的預(yù)留進(jìn)程中運(yùn)行包括:將所述原始Intent消息發(fā)送至所選擇的預(yù)留進(jìn)程,根據(jù)所述原始Intent消息所指示的目標(biāo)組件在所述預(yù)留進(jìn)程中加載該目標(biāo)組件,對(duì)該目標(biāo)組件進(jìn)行實(shí)例化,使得該目標(biāo)組件根據(jù)所述原始Intent消息所指示的動(dòng)作執(zhí)行操作。
可選地,所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理包括:
通過虛擬機(jī)中的常駐服務(wù)對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理。
依據(jù)本發(fā)明的另一個(gè)方面,提供了一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置,其中,包括:
環(huán)境構(gòu)造單元,適于構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中,使得每個(gè)指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運(yùn)行;
常駐服務(wù)單元,適于對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作。
可選地,該裝置進(jìn)一步包括:信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明代理組件;
所述常駐服務(wù)單元,適于監(jiān)聽安卓系統(tǒng)中的異步調(diào)用事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)生異步調(diào)用事件時(shí),攔截所述異步調(diào)用事件,判斷所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;是則,將所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件替換為所述代理組件,記錄替換前所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息作為原始執(zhí)行消息,并在替換后放行所述異步調(diào)用事件;否則,直接放行所述異步調(diào)用事件。
可選地,所述常駐服務(wù)單元,還適于當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息時(shí),該執(zhí)行消息中的目標(biāo)組件為替換后的所述代理組件,所述代理組件接收該執(zhí)行消息。
可選地,信息配置單元,還適于在安卓系統(tǒng)中預(yù)先聲明適配于不同組件類型的預(yù)留進(jìn)程;
所述常駐服務(wù)單元,還適于當(dāng)所述代理組件接收到安卓系統(tǒng)發(fā)出的執(zhí)行消息時(shí),查找所記錄的該執(zhí)行消息對(duì)應(yīng)的原始執(zhí)行消息;選擇一個(gè)適配于所述原始執(zhí)行消息中的目標(biāo)組件所屬的組件類型的預(yù)留進(jìn)程;將所述原始執(zhí)行消息發(fā)送至所選擇的預(yù)留進(jìn)程中,使得所述原始執(zhí)行消息中的目標(biāo)組件在所選擇的預(yù)留進(jìn)程中運(yùn)行。
可選地,所述常駐服務(wù)單元,適于監(jiān)聽安卓系統(tǒng)中調(diào)用用于獲取IntentSender對(duì)象的方法的事件;當(dāng)監(jiān)聽到調(diào)用用于獲取IntentSender對(duì)象的方法的事件時(shí),攔截相應(yīng)的IntentSender對(duì)象,從所述IntentSender對(duì)象中提取Intent消息,判斷該Intent消息所指示的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件。
可選地,所述常駐服務(wù)單元,還適于在所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理之前,獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊(cè)的組件的相關(guān)信息并保存至配置管理表中;
所述常駐服務(wù)單元,適于判斷該Intent消息中的目標(biāo)組件的相關(guān)信息是否匹配于所述配置管理表中記錄的組件的相關(guān)信息;是則,確定該Intent消息所指示的目標(biāo)組件是虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;否則不是。
可選地,所述常駐服務(wù)單元,適于獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的組件的相關(guān)信息并保存至所述配置管理表中。
可選地,所述常駐服務(wù)單元,適于將所攔截的所述IntentSender對(duì)象中的Intent消息所指示的目標(biāo)組件替換為所述代理組件,并將從所述IntentSender對(duì)象中提取出的Intent消息作為原始Intent消息并記錄;放行替換后的所述IntentSender對(duì)象,使得所述IntentSender對(duì)象被傳遞至相應(yīng)的處理方,相應(yīng)的處理方在預(yù)設(shè)時(shí)間激發(fā)安卓系統(tǒng)發(fā)出相應(yīng)的被替換后的Intent消息。
可選地,當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出相應(yīng)地被替換后的Intent消息,該Intent消息所指示的目標(biāo)組件為所述代理組件,所述代理組件接收該Intent消息。
可選地,所述常駐服務(wù)單元,適于當(dāng)所述代理組件接收到所述Intent消息時(shí),查找所記錄的該Intent消息對(duì)應(yīng)的原始Intent消息;將所述原始Intent消息發(fā)送至所選擇的預(yù)留進(jìn)程,根據(jù)所述原始Intent消息所指示的目標(biāo)組件在所述預(yù)留進(jìn)程中加載該目標(biāo)組件,對(duì)該目標(biāo)組件進(jìn)行實(shí)例化,使得該目標(biāo)組件根據(jù)所述原始Intent消息所指示的動(dòng)作執(zhí)行操作。
可選地,所述常駐服務(wù)單元,適于通過虛擬機(jī)中的常駐服務(wù)對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理。
有上述可知,根據(jù)本發(fā)明的技術(shù)方案,為了實(shí)現(xiàn)安卓系統(tǒng)中多個(gè)相同安卓應(yīng)用的并行運(yùn)行,在安卓系統(tǒng)中構(gòu)造了虛擬機(jī)環(huán)境,將指定安卓應(yīng)用的分身應(yīng)用放入到該虛擬機(jī)中運(yùn)行,且為了克服分身應(yīng)用對(duì)于安卓系統(tǒng)是未知的進(jìn)而分身應(yīng)用無法響應(yīng)安卓系統(tǒng)中的異步調(diào)用事件的問題,本方案對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作,可以完美地實(shí)現(xiàn)安卓系統(tǒng)中指定安卓應(yīng)用與其相應(yīng)的分身應(yīng)用的并行運(yùn)行,甚至對(duì)于異步調(diào)用機(jī)制的實(shí)現(xiàn)也十分順利。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理方法的流程圖;
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置的架構(gòu)圖;
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置的示意圖;
圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置的示意圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理方法的流程圖。如圖1所示,該方法包括:
步驟S110,構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中,使得每個(gè)指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運(yùn)行。
其中,指定安卓應(yīng)用指的是能夠在安卓系統(tǒng)中正常運(yùn)行的,類似于QQ聊天、UC瀏覽器等的應(yīng)用軟件。而指定安卓應(yīng)用的分身應(yīng)用作為指定安卓應(yīng)用的復(fù)制體,可以看做是指定安卓應(yīng)用的分身。現(xiàn)有技術(shù)中,每個(gè)指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用是不可以并行運(yùn)行的,其原因是安卓系統(tǒng)無法認(rèn)可兩個(gè)相同的應(yīng)用所聲明的相同的注冊(cè)信息,因此,在指定安卓應(yīng)用已安裝的情況下,指定安卓應(yīng)用的分身應(yīng)用是無法成功注冊(cè)到安卓系統(tǒng)中的,對(duì)于安卓系統(tǒng)來說,指定安卓應(yīng)用的分身應(yīng)用是未知的,安卓系統(tǒng)無法與其進(jìn)行正常交互。
步驟S120,對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作。
所述異步調(diào)用事件是指異步調(diào)用事件的發(fā)生時(shí)間與調(diào)用實(shí)施時(shí)間并不同步或者有緊密關(guān)系,在異步調(diào)用事件發(fā)生后,可以在未來任一時(shí)間來決定指定該異步調(diào)用時(shí)間對(duì)應(yīng)的操作的執(zhí)行。
可見,圖1所示的方法為了實(shí)現(xiàn)安卓系統(tǒng)中多個(gè)相同安卓應(yīng)用的并行運(yùn)行,在安卓系統(tǒng)中構(gòu)造了虛擬機(jī)環(huán)境,將指定安卓應(yīng)用的分身應(yīng)用放入到該虛擬機(jī)中運(yùn)行,且為了克服分身應(yīng)用對(duì)于安卓系統(tǒng)是未知的進(jìn)而分身應(yīng)用無法響應(yīng)安卓系統(tǒng)中的異步調(diào)用事件的問題,本方案對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作,可以完美地實(shí)現(xiàn)安卓系統(tǒng)中指定安卓應(yīng)用與其相應(yīng)的分身應(yīng)用的并行運(yùn)行,甚至對(duì)于異步調(diào)用機(jī)制的實(shí)現(xiàn)也十分順利。
在本發(fā)明的一個(gè)實(shí)施例中,由于分身應(yīng)用對(duì)于安卓系統(tǒng)來說是未知的,當(dāng)關(guān)于分身應(yīng)用的異步調(diào)用事件發(fā)生時(shí),該事件對(duì)應(yīng)的真實(shí)的原本的目的是想要異步地調(diào)用分身應(yīng)用中的一個(gè)組件并執(zhí)行某種操作,由于異步調(diào)用事件對(duì)應(yīng)的操作的執(zhí)行消息是由安卓系統(tǒng)在特定的時(shí)間點(diǎn)發(fā)出的,又由于分身應(yīng)用的組件并沒有在安卓系統(tǒng)中注冊(cè)過,當(dāng)以分身應(yīng)用中的組件為該執(zhí)行消息的目標(biāo)組件時(shí),安卓系統(tǒng)并不知道要把這個(gè)執(zhí)行消息發(fā)給誰,導(dǎo)致了異步調(diào)用事件的失敗。為此,本方案需要在該異步調(diào)用事件發(fā)生時(shí)對(duì)其進(jìn)行一定的處理,使得該異步調(diào)用事件的目標(biāo)組件暫時(shí)地以安卓系統(tǒng)所認(rèn)識(shí)的組件代替,使得安卓系統(tǒng)能夠成功地發(fā)出執(zhí)行消息,等到執(zhí)行消息發(fā)送到用于進(jìn)行代替的組件中時(shí),該用于進(jìn)行代替的組件可以將該執(zhí)行消息進(jìn)行轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)到真正的目標(biāo)組件,這樣目標(biāo)組件迂回地能夠接收到異步調(diào)用事件對(duì)應(yīng)的操作的執(zhí)行消息進(jìn)而執(zhí)行相應(yīng)的操作,使得異步調(diào)用事件成功。
即圖1所示的方法進(jìn)一步包括:在安卓系統(tǒng)中預(yù)先聲明代理組件;上述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理包括:監(jiān)聽安卓系統(tǒng)中的異步調(diào)用事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)生異步調(diào)用事件時(shí),攔截所述異步調(diào)用事件,判斷所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;是則,將所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件替換為所述代理組件,記錄替換前所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息作為原始執(zhí)行消息,并在替換后放行所述異步調(diào)用事件;否則,直接放行所述異步調(diào)用事件。
進(jìn)一步地,所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理還包括:當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息時(shí),該執(zhí)行消息中的目標(biāo)組件為替換后的所述代理組件,所述代理組件接收該執(zhí)行消息。
以及進(jìn)一步地,在安卓系統(tǒng)中預(yù)先聲明適配于不同組件類型的預(yù)留進(jìn)程;所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理還包括:當(dāng)所述代理組件接收到安卓系統(tǒng)發(fā)出的執(zhí)行消息時(shí),查找所記錄的該執(zhí)行消息對(duì)應(yīng)的原始執(zhí)行消息;選擇一個(gè)適配于所述原始執(zhí)行消息中的目標(biāo)組件所屬的組件類型的預(yù)留進(jìn)程;將所述原始執(zhí)行消息發(fā)送至所選擇的預(yù)留進(jìn)程中,使得所述原始執(zhí)行消息中的目標(biāo)組件在所選擇的預(yù)留進(jìn)程中運(yùn)行。其中,安卓系統(tǒng)中包括多種類型的組件,不同類型的組件由于執(zhí)行不同類型功能的操作,本步驟中,所聲明的預(yù)留進(jìn)程與組件類型相匹配,即對(duì)于一個(gè)預(yù)留進(jìn)程來說,所有符合該預(yù)留進(jìn)程所適配的組件類型的組件都可以在該預(yù)留進(jìn)程中運(yùn)行。
本方案為不同組件類型的組件分別預(yù)先聲明了預(yù)留進(jìn)程,在分身應(yīng)用需要運(yùn)行某種組件時(shí)為其提供相應(yīng)的預(yù)留進(jìn)程,此種方式不同于現(xiàn)有技術(shù)中常見的為具體的組件聲明具體的進(jìn)程的方式,預(yù)留進(jìn)程的管理方式更加靈活方便,對(duì)于未在安卓系統(tǒng)中進(jìn)行注冊(cè)的分身系統(tǒng)的運(yùn)行來說也是十分可靠有效。
在Android中,我們常常使用PendingIntent來表達(dá)一種“留待日后處理”的意思。從這個(gè)角度來說,PendingIntent可以被理解為一種特殊的異步處理機(jī)制。不過,單就命名而言,PendingIntent其實(shí)具有一定誤導(dǎo)性,因?yàn)樗炔焕^承于Intent,也不包含Intent,它的核心可以粗略地匯總成四個(gè)字——“異步激發(fā)”。
很明顯,這種異步激發(fā)常常是要跨進(jìn)程執(zhí)行的。比如說A進(jìn)程作為發(fā)起端,它可以從系統(tǒng)“獲取”一個(gè)PendingIntent,然后A進(jìn)程可以將PendingIntent對(duì)象通過binder機(jī)制“傳遞”給B進(jìn)程,再由B進(jìn)程在未來某個(gè)合適時(shí)機(jī),“回調(diào)”PendingIntent對(duì)象的send()動(dòng)作,完成激發(fā)。
在Android系統(tǒng)中,最適合做集中性管理的組件就是AMS(Activity Manager Service)啦,所以它義不容辭地承擔(dān)起管理所有PendingIntent的職責(zé)。簡(jiǎn)單地說,當(dāng)發(fā)起端獲取PendingIntent時(shí),其實(shí)是需要同時(shí)提供若干intent的。這些intent和PendingIntent只是配套的關(guān)系,而不是聚合的關(guān)系,它們會(huì)被緩存在AMS中。日后,一旦處理端將PendingIntent的“激發(fā)”語(yǔ)義傳遞到AMS,AMS就會(huì)嘗試找到與這個(gè)PendingIntent對(duì)應(yīng)的若干intent,并遞送出去。new PendingIntent(target)創(chuàng)建了PendingIntent對(duì)象,其重要性自不待言。然而,這個(gè)對(duì)象的內(nèi)部核心其實(shí)是由上面那個(gè)getIntentSender()函數(shù)得來的。而這個(gè)IIntentSender核心才是我們真正需要關(guān)心的東西。說穿了,此處的IIntentSender對(duì)象是個(gè)binder代理,它對(duì)應(yīng)的binder實(shí)體是AMS中的PendingIntentRecord對(duì)象。PendingIntent對(duì)象構(gòu)造之時(shí),IIntentSender代理作為參數(shù)傳進(jìn)來,并記錄在PendingIntent的mTarget域。日后,當(dāng)PendingIntent執(zhí)行異步激發(fā)時(shí),其內(nèi)部就是靠這個(gè)mTarget域向AMS傳遞語(yǔ)義的。
我們前文說過,PendingIntent常常會(huì)經(jīng)由binder機(jī)制,傳遞到另一個(gè)進(jìn)程去。而binder機(jī)制可以保證,目標(biāo)進(jìn)程得到的PendingIntent的mTarget域也是合法的IIntentSender代理,而且和發(fā)起端的IIntentSender代理對(duì)應(yīng)著同一個(gè)PendingIntentRecord實(shí)體。
基于此,在本發(fā)明的一個(gè)實(shí)施例中,所述監(jiān)聽安卓系統(tǒng)中的異步調(diào)用事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)生異步調(diào)用事件時(shí),攔截所述異步調(diào)用事件,判斷所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件包括:監(jiān)聽安卓系統(tǒng)中調(diào)用用于獲取IntentSender對(duì)象的方法的事件;當(dāng)監(jiān)聽到調(diào)用用于獲取IntentSender對(duì)象的方法的事件時(shí),攔截相應(yīng)的IntentSender對(duì)象,從所述IntentSender對(duì)象中提取Intent消息,判斷該Intent消息所指示的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件。
其中,在所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理之前,該方法進(jìn)一步包括:獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊(cè)的組件的相關(guān)信息并保存至配置管理表中;判斷該Intent消息所指示的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件包括:判斷該Intent消息中的目標(biāo)組件的相關(guān)信息是否匹配于所述配置管理表中記錄的組件的相關(guān)信息;是則,確定該Intent消息所指示的目標(biāo)組件是虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;否則不是。
分身應(yīng)用的注冊(cè)方式可以是靜態(tài)注冊(cè)方式,注冊(cè)信息寫死在Manifest文件中,即所述獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊(cè)的組件的相關(guān)信息并保存至配置管理表中包括:獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的組件的相關(guān)信息并保存至所述配置管理表中。
在本發(fā)明的一個(gè)實(shí)施例中,所述將所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件替換為所述代理組件,記錄替換前所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息作為原始執(zhí)行消息,并在替換后放行所述異步調(diào)用事件包括:將所攔截的所述IntentSender對(duì)象中的Intent消息所指示的目標(biāo)組件替換為所述代理組件,并將從所述IntentSender對(duì)象中提取出的Intent消息作為原始Intent消息并記錄;放行替換后的所述IntentSender對(duì)象,使得所述IntentSender對(duì)象被傳遞至相應(yīng)的處理方,相應(yīng)的處理方在預(yù)設(shè)時(shí)間激發(fā)安卓系統(tǒng)發(fā)出相應(yīng)的被替換后的Intent消息。
以及,所述當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息時(shí),該執(zhí)行消息中的目標(biāo)組件為替換后的所述代理組件,所述代理組件接收該執(zhí)行消息包括:當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出相應(yīng)地被替換后的Intent消息,該Intent消息所指示的目標(biāo)組件為所述代理組件,所述代理組件接收該Intent消息。
具體地,所述當(dāng)所述代理組件接收到安卓系統(tǒng)發(fā)出的執(zhí)行消息時(shí),查找所記錄的該執(zhí)行消息對(duì)應(yīng)的原始執(zhí)行消息包括:當(dāng)所述代理組件接收到所述Intent消息時(shí),查找所記錄的該Intent消息對(duì)應(yīng)的原始Intent消息;所述將所述原始執(zhí)行消息發(fā)送至所選擇的預(yù)留進(jìn)程中,使得所述原始執(zhí)行消息中的目標(biāo)組件在所選擇的預(yù)留進(jìn)程中運(yùn)行包括:將所述原始Intent消息發(fā)送至所選擇的預(yù)留進(jìn)程,根據(jù)所述原始Intent消息所指示的目標(biāo)組件在所述預(yù)留進(jìn)程中加載該目標(biāo)組件,對(duì)該目標(biāo)組件進(jìn)行實(shí)例化,使得該目標(biāo)組件根據(jù)所述原始Intent消息所指示的動(dòng)作執(zhí)行操作。
在本發(fā)明的一個(gè)實(shí)施例中,所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理包括:通過虛擬機(jī)中的常駐服務(wù)對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理。
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置的架構(gòu)圖。如圖2所示,虛線框表示了安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置,該裝置與安卓系統(tǒng)中的AMS服務(wù)的交互構(gòu)成了整個(gè)架構(gòu)體系,該裝置向安卓系統(tǒng)注冊(cè)了多個(gè)組件:組件1、組件2、組件3……,該裝置在虛擬機(jī)中運(yùn)行了分身應(yīng)用a和分身應(yīng)用b,分身應(yīng)用a中有一些組件和進(jìn)程,均未向安卓系統(tǒng)注冊(cè),分身應(yīng)用b中有一些組件和進(jìn)程,也均未向安卓系統(tǒng)注冊(cè)。異步調(diào)用事件包括:分身應(yīng)用a中的進(jìn)程a1從系統(tǒng)AMS獲取IntentSender后傳遞IntentSender至分身應(yīng)用b中的進(jìn)程b1,響應(yīng)于未來發(fā)生的某個(gè)事件,如用戶點(diǎn)擊指定控件時(shí),進(jìn)程b1激發(fā)系統(tǒng)AMS,系統(tǒng)AMS向目標(biāo)組件a1發(fā)送執(zhí)行消息。其中將組件a1作為目標(biāo)組件是在進(jìn)程a1從系統(tǒng)AMS獲取IntentSender時(shí)就預(yù)先設(shè)置的,但又由于系統(tǒng)不認(rèn)識(shí)組件a1使得該執(zhí)行消息的發(fā)送是失敗的。為解決此問題,在進(jìn)程a1從系統(tǒng)AMS獲取IntentSender時(shí)進(jìn)行攔截將其設(shè)置的目標(biāo)組件從a1替換為系統(tǒng)認(rèn)識(shí)的組件1,并保存替換的映射關(guān)系。當(dāng)系統(tǒng)被激發(fā)后發(fā)出執(zhí)行消息時(shí),被啟動(dòng)的是組件1,再?gòu)膭偛疟4娴挠成潢P(guān)系找到真正的目標(biāo)組件是a1,再將相應(yīng)的執(zhí)行消息傳給組件a1,使得組件a1能夠執(zhí)行異步調(diào)用事件對(duì)應(yīng)的操作。
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置的示意圖,如圖3所示,該安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置300包括:
環(huán)境構(gòu)造單元310,適于構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中,使得每個(gè)指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運(yùn)行。
常駐服務(wù)單元320,適于對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作。
可見,圖3所示的裝置為了實(shí)現(xiàn)安卓系統(tǒng)中多個(gè)相同安卓應(yīng)用的并行運(yùn)行,在安卓系統(tǒng)中構(gòu)造了虛擬機(jī)環(huán)境,將指定安卓應(yīng)用的分身應(yīng)用放入到該虛擬機(jī)中運(yùn)行,且為了克服分身應(yīng)用對(duì)于安卓系統(tǒng)是未知的進(jìn)而分身應(yīng)用無法響應(yīng)安卓系統(tǒng)中的異步調(diào)用事件的問題,本方案對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作,可以完美地實(shí)現(xiàn)安卓系統(tǒng)中指定安卓應(yīng)用與其相應(yīng)的分身應(yīng)用的并行運(yùn)行,甚至對(duì)于異步調(diào)用機(jī)制的實(shí)現(xiàn)也十分順利。
圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置的示意圖,如圖4所示,該安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置400包括:環(huán)境構(gòu)造單元310、常駐服務(wù)單元320和信息配置單元330;
上述已經(jīng)描述過環(huán)境構(gòu)造單元310、常駐服務(wù)單元320的部分功能。
信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明代理組件;常駐服務(wù)單元320,適于監(jiān)聽安卓系統(tǒng)中的異步調(diào)用事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)生異步調(diào)用事件時(shí),攔截所述異步調(diào)用事件,判斷所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;是則,將所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件替換為所述代理組件,記錄替換前所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息作為原始執(zhí)行消息,并在替換后放行所述異步調(diào)用事件;否則,直接放行所述異步調(diào)用事件。
在本發(fā)明的一個(gè)實(shí)施例中,常駐服務(wù)單元320,還適于當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息時(shí),該執(zhí)行消息中的目標(biāo)組件為替換后的所述代理組件,所述代理組件接收該執(zhí)行消息。
在本發(fā)明的一個(gè)實(shí)施例中,信息配置單元330,還適于在安卓系統(tǒng)中預(yù)先聲明適配于不同組件類型的預(yù)留進(jìn)程;所述常駐服務(wù)單元320,還適于當(dāng)所述代理組件接收到安卓系統(tǒng)發(fā)出的執(zhí)行消息時(shí),查找所記錄的該執(zhí)行消息對(duì)應(yīng)的原始執(zhí)行消息;選擇一個(gè)適配于所述原始執(zhí)行消息中的目標(biāo)組件所屬的組件類型的預(yù)留進(jìn)程;將所述原始執(zhí)行消息發(fā)送至所選擇的預(yù)留進(jìn)程中,使得所述原始執(zhí)行消息中的目標(biāo)組件在所選擇的預(yù)留進(jìn)程中運(yùn)行。
具體地,所述常駐服務(wù)單元320,適于監(jiān)聽安卓系統(tǒng)中調(diào)用用于獲取IntentSender對(duì)象的方法的事件;當(dāng)監(jiān)聽到調(diào)用用于獲取IntentSender對(duì)象的方法的事件時(shí),攔截相應(yīng)的IntentSender對(duì)象,從所述IntentSender對(duì)象中提取Intent消息,判斷該Intent消息所指示的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件。
在本發(fā)明的一個(gè)實(shí)施例中,常駐服務(wù)單元320,還適于在所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理之前,獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊(cè)的組件的相關(guān)信息并保存至配置管理表中;所述常駐服務(wù)單元320,適于判斷該Intent消息中的目標(biāo)組件的相關(guān)信息是否匹配于所述配置管理表中記錄的組件的相關(guān)信息;是則,確定該Intent消息所指示的目標(biāo)組件是虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;否則不是。
在本發(fā)明的一個(gè)實(shí)施例中,所述常駐服務(wù)單元320,適于獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的組件的相關(guān)信息并保存至所述配置管理表中。
在本發(fā)明的一個(gè)實(shí)施例中,所述常駐服務(wù)單元320,適于將所攔截的所述IntentSender對(duì)象中的Intent消息所指示的目標(biāo)組件替換為所述代理組件,并將從所述IntentSender對(duì)象中提取出的Intent消息作為原始Intent消息并記錄;放行替換后的所述IntentSender對(duì)象,使得所述IntentSender對(duì)象被傳遞至相應(yīng)的處理方,相應(yīng)的處理方在預(yù)設(shè)時(shí)間激發(fā)安卓系統(tǒng)發(fā)出相應(yīng)的被替換后的Intent消息。
其中,當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出相應(yīng)地被替換后的Intent消息,該Intent消息所指示的目標(biāo)組件為所述代理組件,所述代理組件接收該Intent消息。其中,所述常駐服務(wù)單元320,適于當(dāng)所述代理組件接收到所述Intent消息時(shí),查找所記錄的該Intent消息對(duì)應(yīng)的原始Intent消息;將所述原始Intent消息發(fā)送至所選擇的預(yù)留進(jìn)程,根據(jù)所述原始Intent消息所指示的目標(biāo)組件在所述預(yù)留進(jìn)程中加載該目標(biāo)組件,對(duì)該目標(biāo)組件進(jìn)行實(shí)例化,使得該目標(biāo)組件根據(jù)所述原始Intent消息所指示的動(dòng)作執(zhí)行操作。
在本發(fā)明的一個(gè)實(shí)施例中,所述常駐服務(wù)單元320,適于通過虛擬機(jī)中的常駐服務(wù)對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理。
需要說明的是,圖3-圖4所示裝置的各實(shí)施例與圖1-圖2所示方法的各實(shí)施例對(duì)應(yīng)相同,上文已有詳細(xì)說明,在此不再贅述。
綜上所述,在本發(fā)明的技術(shù)方案中,為了實(shí)現(xiàn)安卓系統(tǒng)中多個(gè)相同安卓應(yīng)用的并行運(yùn)行,在安卓系統(tǒng)中構(gòu)造了虛擬機(jī)環(huán)境,將指定安卓應(yīng)用的分身應(yīng)用放入到該虛擬機(jī)中運(yùn)行,且為了克服分身應(yīng)用對(duì)于安卓系統(tǒng)是未知的進(jìn)而分身應(yīng)用無法響應(yīng)安卓系統(tǒng)中的異步調(diào)用事件的問題,本方案對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作,可以完美地實(shí)現(xiàn)安卓系統(tǒng)中指定安卓應(yīng)用與其相應(yīng)的分身應(yīng)用的并行運(yùn)行,甚至對(duì)于異步調(diào)用機(jī)制的實(shí)現(xiàn)也十分順利。
需要說明的是:
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬裝置或者其它設(shè)備固有相關(guān)。各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類裝置所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。
類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
本發(fā)明公開了A1、一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理方法,其中,包括:
構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中,使得每個(gè)指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運(yùn)行;
對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作。
A2、如A1所述的方法,其中,該方法進(jìn)一步包括:在安卓系統(tǒng)中預(yù)先聲明代理組件;
所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理包括:
監(jiān)聽安卓系統(tǒng)中的異步調(diào)用事件;
當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)生異步調(diào)用事件時(shí),攔截所述異步調(diào)用事件,判斷所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;
是則,將所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件替換為所述代理組件,記錄替換前所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息作為原始執(zhí)行消息,并在替換后放行所述異步調(diào)用事件;
否則,直接放行所述異步調(diào)用事件。
A3、如A2所述的方法,其中,所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理還包括:
當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息時(shí),該執(zhí)行消息中的目標(biāo)組件為替換后的所述代理組件,所述代理組件接收該執(zhí)行消息。
A4、如A3所述的方法,其中,該方法進(jìn)一步包括:在安卓系統(tǒng)中預(yù)先聲明適配于不同組件類型的預(yù)留進(jìn)程;
所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理還包括:
當(dāng)所述代理組件接收到安卓系統(tǒng)發(fā)出的執(zhí)行消息時(shí),查找所記錄的該執(zhí)行消息對(duì)應(yīng)的原始執(zhí)行消息;
選擇一個(gè)適配于所述原始執(zhí)行消息中的目標(biāo)組件所屬的組件類型的預(yù)留進(jìn)程;
將所述原始執(zhí)行消息發(fā)送至所選擇的預(yù)留進(jìn)程中,使得所述原始執(zhí)行消息中的目標(biāo)組件在所選擇的預(yù)留進(jìn)程中運(yùn)行。
A5、如A2-A4中任一項(xiàng)所述的方法,其中,所述監(jiān)聽安卓系統(tǒng)中的異步調(diào)用事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)生異步調(diào)用事件時(shí),攔截所述異步調(diào)用事件,判斷所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件包括:
監(jiān)聽安卓系統(tǒng)中調(diào)用用于獲取IntentSender對(duì)象的方法的事件;
當(dāng)監(jiān)聽到調(diào)用用于獲取IntentSender對(duì)象的方法的事件時(shí),攔截相應(yīng)的IntentSender對(duì)象,從所述IntentSender對(duì)象中提取Intent消息,判斷該Intent消息所指示的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件。
A6、如A5所述的方法,其中,在所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理之前,該方法進(jìn)一步包括:獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊(cè)的組件的相關(guān)信息并保存至配置管理表中;
判斷該Intent消息所指示的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件包括:判斷該Intent消息中的目標(biāo)組件的相關(guān)信息是否匹配于所述配置管理表中記錄的組件的相關(guān)信息;是則,確定該Intent消息所指示的目標(biāo)組件是虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;否則不是。
A7、如A6所述的方法,其中,所述獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊(cè)的組件的相關(guān)信息并保存至配置管理表中包括:
獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;
解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的組件的相關(guān)信息并保存至所述配置管理表中。
A8、如A5所述的方法,其中,所述將所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件替換為所述代理組件,記錄替換前所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息作為原始執(zhí)行消息,并在替換后放行所述異步調(diào)用事件包括:
將所攔截的所述IntentSender對(duì)象中的Intent消息所指示的目標(biāo)組件替換為所述代理組件,并將從所述IntentSender對(duì)象中提取出的Intent消息作為原始Intent消息并記錄;
放行替換后的所述IntentSender對(duì)象,使得所述IntentSender對(duì)象被傳遞至相應(yīng)的處理方,相應(yīng)的處理方在預(yù)設(shè)時(shí)間激發(fā)安卓系統(tǒng)發(fā)出相應(yīng)的被替換后的Intent消息。
A9、如A8所述的方法,其中,所述當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息時(shí),該執(zhí)行消息中的目標(biāo)組件為替換后的所述代理組件,所述代理組件接收該執(zhí)行消息包括:
當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出相應(yīng)地被替換后的Intent消息,該Intent消息所指示的目標(biāo)組件為所述代理組件,所述代理組件接收該Intent消息。
A10、如A9所述的方法,其中,所述當(dāng)所述代理組件接收到安卓系統(tǒng)發(fā)出的執(zhí)行消息時(shí),查找所記錄的該執(zhí)行消息對(duì)應(yīng)的原始執(zhí)行消息包括:
當(dāng)所述代理組件接收到所述Intent消息時(shí),查找所記錄的該Intent消息對(duì)應(yīng)的原始Intent消息;
所述將所述原始執(zhí)行消息發(fā)送至所選擇的預(yù)留進(jìn)程中,使得所述原始執(zhí)行消息中的目標(biāo)組件在所選擇的預(yù)留進(jìn)程中運(yùn)行包括:將所述原始Intent消息發(fā)送至所選擇的預(yù)留進(jìn)程,根據(jù)所述原始Intent消息所指示的目標(biāo)組件在所述預(yù)留進(jìn)程中加載該目標(biāo)組件,對(duì)該目標(biāo)組件進(jìn)行實(shí)例化,使得該目標(biāo)組件根據(jù)所述原始Intent消息所指示的動(dòng)作執(zhí)行操作。
A11、如A1-A10中任一項(xiàng)所述的方法,其中,所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理包括:
通過虛擬機(jī)中的常駐服務(wù)對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理。
本發(fā)明還公開了B12、一種安卓應(yīng)用的異步調(diào)用機(jī)制的處理裝置,其中,包括:
環(huán)境構(gòu)造單元,適于構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中,使得每個(gè)指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用并行運(yùn)行;
常駐服務(wù)單元,適于對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理,使得虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用能夠執(zhí)行所述異步調(diào)用事件對(duì)應(yīng)的操作。
B13、如B12所述的裝置,其中,該裝置進(jìn)一步包括:信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明代理組件;
所述常駐服務(wù)單元,適于監(jiān)聽安卓系統(tǒng)中的異步調(diào)用事件;當(dāng)監(jiān)聽到安卓系統(tǒng)中發(fā)生異步調(diào)用事件時(shí),攔截所述異步調(diào)用事件,判斷所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;是則,將所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息中的目標(biāo)組件替換為所述代理組件,記錄替換前所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息作為原始執(zhí)行消息,并在替換后放行所述異步調(diào)用事件;否則,直接放行所述異步調(diào)用事件。
B14、如B13所述的裝置,其中,
所述常駐服務(wù)單元,還適于當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出所述異步調(diào)用事件對(duì)應(yīng)的執(zhí)行消息時(shí),該執(zhí)行消息中的目標(biāo)組件為替換后的所述代理組件,所述代理組件接收該執(zhí)行消息。
B15、如B14所述的裝置,其中,信息配置單元,還適于在安卓系統(tǒng)中預(yù)先聲明適配于不同組件類型的預(yù)留進(jìn)程;
所述常駐服務(wù)單元,還適于當(dāng)所述代理組件接收到安卓系統(tǒng)發(fā)出的執(zhí)行消息時(shí),查找所記錄的該執(zhí)行消息對(duì)應(yīng)的原始執(zhí)行消息;選擇一個(gè)適配于所述原始執(zhí)行消息中的目標(biāo)組件所屬的組件類型的預(yù)留進(jìn)程;將所述原始執(zhí)行消息發(fā)送至所選擇的預(yù)留進(jìn)程中,使得所述原始執(zhí)行消息中的目標(biāo)組件在所選擇的預(yù)留進(jìn)程中運(yùn)行。
B16、如B13-B15中任一項(xiàng)所述的裝置,其中,
所述常駐服務(wù)單元,適于監(jiān)聽安卓系統(tǒng)中調(diào)用用于獲取IntentSender對(duì)象的方法的事件;當(dāng)監(jiān)聽到調(diào)用用于獲取IntentSender對(duì)象的方法的事件時(shí),攔截相應(yīng)的IntentSender對(duì)象,從所述IntentSender對(duì)象中提取Intent消息,判斷該Intent消息所指示的目標(biāo)組件是否為虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件。
B17、如B16所述的裝置,其中,所述常駐服務(wù)單元,還適于在所述對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理之前,獲取各指定安卓應(yīng)用的分身應(yīng)用所注冊(cè)的組件的相關(guān)信息并保存至配置管理表中;
所述常駐服務(wù)單元,適于判斷該Intent消息中的目標(biāo)組件的相關(guān)信息是否匹配于所述配置管理表中記錄的組件的相關(guān)信息;是則,確定該Intent消息所指示的目標(biāo)組件是虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的組件;否則不是。
B18、如B17所述的裝置,其中,
所述常駐服務(wù)單元,適于獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的組件的相關(guān)信息并保存至所述配置管理表中。
B19、如B16所述的裝置,其中,
所述常駐服務(wù)單元,適于將所攔截的所述IntentSender對(duì)象中的Intent消息所指示的目標(biāo)組件替換為所述代理組件,并將從所述IntentSender對(duì)象中提取出的Intent消息作為原始Intent消息并記錄;放行替換后的所述IntentSender對(duì)象,使得所述IntentSender對(duì)象被傳遞至相應(yīng)的處理方,相應(yīng)的處理方在預(yù)設(shè)時(shí)間激發(fā)安卓系統(tǒng)發(fā)出相應(yīng)的被替換后的Intent消息。
B20、如B19所述的裝置,其中,
當(dāng)安卓系統(tǒng)被激發(fā)后發(fā)出相應(yīng)地被替換后的Intent消息,該Intent消息所指示的目標(biāo)組件為所述代理組件,所述代理組件接收該Intent消息。
B21、如B20所述的裝置,其中,
所述常駐服務(wù)單元,適于當(dāng)所述代理組件接收到所述Intent消息時(shí),查找所記錄的該Intent消息對(duì)應(yīng)的原始Intent消息;將所述原始Intent消息發(fā)送至所選擇的預(yù)留進(jìn)程,根據(jù)所述原始Intent消息所指示的目標(biāo)組件在所述預(yù)留進(jìn)程中加載該目標(biāo)組件,對(duì)該目標(biāo)組件進(jìn)行實(shí)例化,使得該目標(biāo)組件根據(jù)所述原始Intent消息所指示的動(dòng)作執(zhí)行操作。
B22、如B12-B21中任一項(xiàng)所述的裝置,其中,
所述常駐服務(wù)單元,適于通過虛擬機(jī)中的常駐服務(wù)對(duì)關(guān)于虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的異步調(diào)用事件進(jìn)行代理處理。