本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種安卓應(yīng)用的進(jìn)程管理方法和裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,安卓系統(tǒng)中無(wú)法實(shí)現(xiàn)對(duì)多個(gè)相同的安卓應(yīng)用的并行運(yùn)行,其原因是:每個(gè)安卓應(yīng)用在安裝在安卓系統(tǒng)中時(shí),該安卓應(yīng)用的安裝包中的配置文件中的配置信息將被注冊(cè)到安卓系統(tǒng)中,安卓系統(tǒng)通過(guò)這些注冊(cè)信息來(lái)獲知安卓應(yīng)用的存在以及運(yùn)行相關(guān)信息,在一個(gè)安卓應(yīng)用已安裝到安卓系統(tǒng)的基礎(chǔ)上,如果還想將該安卓應(yīng)用的分身應(yīng)用再次安裝到安卓系統(tǒng)中,安卓系統(tǒng)因已接收過(guò)相同的注冊(cè)信息而不能接納此分身應(yīng)用的注冊(cè),因此分身應(yīng)用對(duì)于安卓系統(tǒng)來(lái)說(shuō)是未知的,進(jìn)而分身系統(tǒng)無(wú)法正常與安卓系統(tǒng)進(jìn)行交互,導(dǎo)致分身系統(tǒng)無(wú)法正常運(yùn)行。
然而,對(duì)多個(gè)相同的安卓應(yīng)用的并行運(yùn)行的需求在用戶(hù)群體中是存在的,常見(jiàn)的,用戶(hù)希望在自己的智能終端上通過(guò)不同的賬號(hào)登錄兩個(gè)QQ應(yīng)用,讓這兩個(gè)QQ應(yīng)用并行運(yùn)行,用戶(hù)可以根據(jù)自己的需求分別使用不同的QQ應(yīng)用來(lái)與不同社交圈的好友進(jìn)行聊天會(huì)話,符合很多應(yīng)用場(chǎng)景。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的安卓應(yīng)用的進(jìn)程管理方法和裝置。
依據(jù)本發(fā)明的一個(gè)方面,提供了一種安卓應(yīng)用的進(jìn)程管理方法,其中,包括:
在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程;
構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中運(yùn)行;
當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬的組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行。
可選地,所述當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬組件類(lèi)型的預(yù)留進(jìn)程包括:
監(jiān)聽(tīng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)請(qǐng)求調(diào)用目標(biāo)組件的事件;
當(dāng)監(jiān)聽(tīng)到該事件時(shí),禁止該事件繼續(xù)執(zhí)行;獲取該事件對(duì)應(yīng)的目標(biāo)組件的相關(guān)信息;
根據(jù)所述目標(biāo)組件的相關(guān)信息確定所述目標(biāo)組件所屬的組件類(lèi)型,從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于該組件類(lèi)型的預(yù)留進(jìn)程。
可選地,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行包括:
啟動(dòng)所選擇的預(yù)留進(jìn)程,加載所述目標(biāo)組件,根據(jù)所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)在該預(yù)留進(jìn)程中對(duì)所述目標(biāo)組件進(jìn)行實(shí)例化,使得實(shí)例化的目標(biāo)組件在該預(yù)留進(jìn)程中運(yùn)行。
可選地,所述在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Activity預(yù)留進(jìn)程,所述Activity預(yù)留進(jìn)程適配于Activity組件類(lèi)型;
當(dāng)所述目標(biāo)組件屬于Activity組件類(lèi)型時(shí),所述從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行包括:?jiǎn)?dòng)一個(gè)Activity預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行。
可選地,該方法進(jìn)一步包括:維護(hù)一個(gè)Activity任務(wù)棧;在所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程之前,該方法進(jìn)一步包括:
根據(jù)所述目標(biāo)組件的相關(guān)信息,判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù);
是則,不再執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程的操作,根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用;
否則,執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程并將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行的操作,并將所述目標(biāo)組件的運(yùn)行事件作為一個(gè)任務(wù)壓入所述Activity任務(wù)棧中。
可選地,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTask模式時(shí),所述判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù)包括:判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用包括:
將所述Activity任務(wù)棧中位于所述任務(wù)上方的其他任務(wù)銷(xiāo)毀,使得所述任務(wù)位于所述Activity任務(wù)棧的頂端;
將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
可選地,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleInstance模式時(shí),所述判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù)包括:判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用包括:將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
可選地,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTop模式時(shí),所述判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù)包括:判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù)且所述任務(wù)位于所述Activity任務(wù)棧的頂端;
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用包括:將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
可選地,所述在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Service預(yù)留進(jìn)程,所述Service預(yù)留進(jìn)程適配于Service組件類(lèi)型;
當(dāng)所述目標(biāo)組件屬于Service組件類(lèi)型時(shí),所述啟動(dòng)所選擇的預(yù)留進(jìn)程,根據(jù)所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)在該預(yù)留進(jìn)程中對(duì)所述目標(biāo)組件進(jìn)行實(shí)例化,使得實(shí)例化的目標(biāo)組件在該預(yù)留進(jìn)程中運(yùn)行包括:?jiǎn)?dòng)一個(gè)Service預(yù)留進(jìn)程,將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)發(fā)送至所述Service預(yù)留進(jìn)程,使得所述Service預(yù)留進(jìn)程根據(jù)所述Intent參數(shù)返回一個(gè)對(duì)應(yīng)于所述目標(biāo)組件的Binder消息;根據(jù)所述Binder消息與所述目標(biāo)組件建立連接,使得所述目標(biāo)組件在所述Service預(yù)留進(jìn)程中加載并運(yùn)行。
可選地,該方法進(jìn)一步包括:預(yù)存Binder消息與Intent參數(shù)的哈希值的映射關(guān)系表;
所述將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)發(fā)送至所述Service預(yù)留進(jìn)程,使得所述Service預(yù)留進(jìn)程根據(jù)所述Intent參數(shù)返回一個(gè)對(duì)應(yīng)于所述目標(biāo)組件的Binder消息包括:計(jì)算所述Intent參數(shù)的哈希值,將所述哈希值發(fā)送至所述Service預(yù)留進(jìn)程,如果所述Intent參數(shù)的哈希值在所述映射關(guān)系表中,所述Service預(yù)留進(jìn)程返回所述映射關(guān)系表中與所述Intent參數(shù)的哈希值對(duì)應(yīng)的Binder消息。
可選地,所述在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Receiver預(yù)留進(jìn)程,所述Receiver預(yù)留進(jìn)程適配于Receiver組件類(lèi)型;
所述當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬的組件類(lèi)型的預(yù)留進(jìn)程包括:當(dāng)監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件時(shí),將符合所述廣播消息的的接收條件的虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的Receiver組件作為目標(biāo)組件,所述目標(biāo)組件屬于Receiver組件類(lèi)型;對(duì)于每個(gè)目標(biāo)組件,啟動(dòng)一個(gè)Receiver預(yù)留進(jìn)程,在該Receiver預(yù)留進(jìn)程加載并運(yùn)行所述目標(biāo)進(jìn)程。
可選地,監(jiān)聽(tīng)安卓系統(tǒng)中發(fā)送廣播消息的事件包括:
將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時(shí),確定監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件;
該方法進(jìn)一步包括:當(dāng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器均不符合所述廣播消息的的接收條件時(shí),放行所述廣播消息。
可選地,該方法進(jìn)一步包括:獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的Receiver組件的相關(guān)信息并保存至所述配置管理表中。
則所述將符合所述廣播消息的的接收條件的虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的Receiver組件作為目標(biāo)組件包括:判斷所述配置管理表中記錄的Receiver組件的相關(guān)信息是否符合所述廣播消息的接收條件。
可選地,所述在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Provider預(yù)留進(jìn)程,所述Provider預(yù)留進(jìn)程適配于Provider組件類(lèi)型;
當(dāng)所述目標(biāo)組件屬于Provider組件類(lèi)型時(shí),所述從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行包括:選擇并啟動(dòng)一個(gè)Provider預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該P(yáng)rovider預(yù)留進(jìn)程中運(yùn)行。
可選地,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù);
所述將所述目標(biāo)組件分配至該P(yáng)rovider預(yù)留進(jìn)程中運(yùn)行包括:將所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù)中的author參數(shù)傳遞給所述Provider預(yù)留進(jìn)程,使得所述Provider預(yù)留進(jìn)程根據(jù)所述author參數(shù)獲取到所述目標(biāo)組件的屬性數(shù)據(jù),根據(jù)所述目標(biāo)組件的屬性數(shù)據(jù)在所述Service預(yù)留進(jìn)程中加載并運(yùn)行所述目標(biāo)數(shù)據(jù)。
依據(jù)本發(fā)明的另一個(gè)方面,提供了一種安卓應(yīng)用的進(jìn)程管理裝置,其中,包括:
信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程;
環(huán)境構(gòu)造單元,適于構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中運(yùn)行;
常駐服務(wù)單元,適于當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬的組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行。
可選地,所述常駐服務(wù)單元,適于監(jiān)聽(tīng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)請(qǐng)求調(diào)用目標(biāo)組件的事件;當(dāng)監(jiān)聽(tīng)到該事件時(shí),禁止該事件繼續(xù)執(zhí)行;獲取該事件對(duì)應(yīng)的目標(biāo)組件的相關(guān)信息;根據(jù)所述目標(biāo)組件的相關(guān)信息確定所述目標(biāo)組件所屬的組件類(lèi)型,從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于該組件類(lèi)型的預(yù)留進(jìn)程。
可選地,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);
所述常駐服務(wù)單元,適于啟動(dòng)所選擇的預(yù)留進(jìn)程,加載所述目標(biāo)組件,根據(jù)所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)在該預(yù)留進(jìn)程中對(duì)所述目標(biāo)組件進(jìn)行實(shí)例化,使得實(shí)例化的目標(biāo)組件在該預(yù)留進(jìn)程中運(yùn)行。
可選地,所述信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明Activity預(yù)留進(jìn)程,所述Activity預(yù)留進(jìn)程適配于Activity組件類(lèi)型;
所述常駐服務(wù)單元,適于當(dāng)所述目標(biāo)組件屬于Activity組件類(lèi)型時(shí),啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行。
可選地,所述常駐服務(wù)單元,進(jìn)一步適于維護(hù)一個(gè)Activity任務(wù)棧;還適于在所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程之前,根據(jù)所述目標(biāo)組件的相關(guān)信息,判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù);是則,不再執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程的操作,根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用;否則,執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程并將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行的操作,并將所述目標(biāo)組件的運(yùn)行事件作為一個(gè)任務(wù)壓入所述Activity任務(wù)棧中。
可選地,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTask模式時(shí),所述常駐服務(wù)單元,適于判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元,適于將所述Activity任務(wù)棧中位于所述任務(wù)上方的其他任務(wù)銷(xiāo)毀,使得所述任務(wù)位于所述Activity任務(wù)棧的頂端;將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
可選地,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleInstance模式時(shí),所述常駐服務(wù)單元,適于判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元,適于將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
可選地,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTop模式時(shí),所述常駐服務(wù)單元,適于判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù)且所述任務(wù)位于所述Activity任務(wù)棧的頂端;
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元,適于將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
可選地,所述信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明Service預(yù)留進(jìn)程,所述Service預(yù)留進(jìn)程適配于Service組件類(lèi)型;
所述常駐服務(wù)單元,適于當(dāng)所述目標(biāo)組件屬于Service組件類(lèi)型時(shí),啟動(dòng)一個(gè)Service預(yù)留進(jìn)程,將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)發(fā)送至所述Service預(yù)留進(jìn)程,使得所述Service預(yù)留進(jìn)程根據(jù)所述Intent參數(shù)返回一個(gè)對(duì)應(yīng)于所述目標(biāo)組件的Binder消息;根據(jù)所述Binder消息與所述目標(biāo)組件建立連接,使得所述目標(biāo)組件在所述Service預(yù)留進(jìn)程中加載并運(yùn)行。
可選地,所述常駐服務(wù)單元,進(jìn)一步適于預(yù)存Binder消息與Intent參數(shù)的哈希值的映射關(guān)系表;
所述常駐服務(wù)單元,適于計(jì)算所述Intent參數(shù)的哈希值,將所述哈希值發(fā)送至所述Service預(yù)留進(jìn)程,如果所述Intent參數(shù)的哈希值在所述映射關(guān)系表中,所述Service預(yù)留進(jìn)程返回所述映射關(guān)系表中與所述Intent參數(shù)的哈希值對(duì)應(yīng)的Binder消息。
可選地,所述信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明Receiver預(yù)留進(jìn)程,所述Receiver預(yù)留進(jìn)程適配于Receiver組件類(lèi)型;
所述常駐服務(wù)單元,適于當(dāng)監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件時(shí),將符合所述廣播消息的的接收條件的虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的Receiver組件作為目標(biāo)組件,所述目標(biāo)組件屬于Receiver組件類(lèi)型;對(duì)于每個(gè)目標(biāo)組件,啟動(dòng)一個(gè)Receiver預(yù)留進(jìn)程,在該Receiver預(yù)留進(jìn)程加載并運(yùn)行所述目標(biāo)進(jìn)程。
可選地,所述常駐服務(wù)單元,適于將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時(shí),確定監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件;
所述常駐服務(wù)單元,進(jìn)一步適于當(dāng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器均不符合所述廣播消息的的接收條件時(shí),放行所述廣播消息。
可選地,所述常駐服務(wù)單元,還適于獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的Receiver組件的相關(guān)信息并保存至所述配置管理表中。
則所述常駐服務(wù)單元,適于判斷所述配置管理表中記錄的Receiver組件的相關(guān)信息是否符合所述廣播消息的接收條件。
可選地,所述信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明Provider預(yù)留進(jìn)程,所述Provider預(yù)留進(jìn)程適配于Provider組件類(lèi)型;
所述常駐服務(wù)單元,適于當(dāng)所述目標(biāo)組件屬于Provider組件類(lèi)型時(shí),選擇并啟動(dòng)一個(gè)Provider預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該P(yáng)rovider預(yù)留進(jìn)程中運(yùn)行。
可選地,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù);
所述常駐服務(wù)單元,適于將所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù)中的author參數(shù)傳遞給所述Provider預(yù)留進(jìn)程,使得所述Provider預(yù)留進(jìn)程根據(jù)所述author參數(shù)獲取到所述目標(biāo)組件的屬性數(shù)據(jù),根據(jù)所述目標(biāo)組件的屬性數(shù)據(jù)在所述Service預(yù)留進(jìn)程中加載并運(yùn)行所述目標(biāo)數(shù)據(jù)。
有上述可知,根據(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)而無(wú)法與安卓系統(tǒng)進(jìn)行組件調(diào)用的交互的問(wèn)題,本方案為不同組件類(lèi)型的組件分別預(yù)先聲明了預(yù)留進(jìn)程,在分身應(yīng)用需要運(yùn)行某種組件時(shí)為其提供相應(yīng)的預(yù)留進(jìn)程,此種方式不同于現(xiàn)有技術(shù)中常見(jiàn)的為具體的組件聲明具體的進(jìn)程的方式,預(yù)留進(jìn)程的管理方式更加靈活方便,對(duì)于未在安卓系統(tǒng)中進(jìn)行注冊(cè)的分身系統(tǒng)的運(yùn)行來(lái)說(shuō)也是十分可靠有效,可以完美地實(shí)現(xiàn)安卓系統(tǒng)中指定安卓應(yīng)用與其心相應(yīng)的分身應(yīng)用的并行運(yùn)行。
上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書(shū)的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說(shuō)明
通過(guò)閱讀下文優(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)用的進(jìn)程管理方法的流程圖;
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的安卓應(yīng)用的運(yùn)行管理架構(gòu)的示意圖;
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓應(yīng)用的進(jìn)程管理裝置的示意圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開(kāi)的示例性實(shí)施例。雖然附圖中顯示了本公開(kāi)的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開(kāi),并且能夠?qū)⒈竟_(kāi)的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓應(yīng)用的進(jìn)程管理方法的流程圖。如圖1所示,該方法包括:
步驟S110,在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程。
安卓系統(tǒng)中包括多種類(lèi)型的組件,不同類(lèi)型的組件由于執(zhí)行不同類(lèi)型功能的操作,本步驟中,所聲明的預(yù)留進(jìn)程與組件類(lèi)型相匹配,即對(duì)于一個(gè)預(yù)留進(jìn)程來(lái)說(shuō),所有符合該預(yù)留進(jìn)程所適配的組件類(lèi)型的組件都可以在該預(yù)留進(jìn)程中運(yùn)行。
步驟S120,構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中運(yùn)行。
其中,指定安卓應(yīng)用指的是能夠在安卓系統(tǒng)中正常運(yùn)行的,類(lèi)似于QQ聊天、UC瀏覽器等的應(yīng)用軟件。而指定安卓應(yīng)用的分身應(yīng)用作為指定安卓應(yīng)用的復(fù)制體,可以看做是指定安卓應(yīng)用的分身?,F(xiàn)有技術(shù)中,每個(gè)指定安卓應(yīng)用的分身應(yīng)用可以與相應(yīng)的指定安卓應(yīng)用是不可以并行運(yùn)行的,其原因是安卓系統(tǒng)無(wú)法認(rèn)可兩個(gè)相同的應(yīng)用所聲明的相同的注冊(cè)信息,因此,在指定安卓應(yīng)用已安裝的情況下,指定安卓應(yīng)用的分身應(yīng)用是無(wú)法成功注冊(cè)到安卓系統(tǒng)中的,對(duì)于安卓系統(tǒng)來(lái)說(shuō),指定安卓應(yīng)用的分身應(yīng)用是未知的,安卓系統(tǒng)無(wú)法與其進(jìn)行正常交互。
步驟S130,當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬的組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行。
本步驟用于將真實(shí)的目標(biāo)組件映射到為之選取的相應(yīng)的預(yù)留進(jìn)程中。
可見(jiàn),圖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)而無(wú)法與安卓系統(tǒng)進(jìn)行組件調(diào)用的交互的問(wèn)題,本方案為不同組件類(lèi)型的組件分別預(yù)先聲明了預(yù)留進(jìn)程,在分身應(yīng)用需要運(yùn)行某種組件時(shí)為其提供相應(yīng)的預(yù)留進(jìn)程,此種方式不同于現(xiàn)有技術(shù)中常見(jiàn)的為具體的組件聲明具體的進(jìn)程的方式,預(yù)留進(jìn)程的管理方式更加靈活方便,對(duì)于未在安卓系統(tǒng)中進(jìn)行注冊(cè)的分身系統(tǒng)的運(yùn)行來(lái)說(shuō)也是十分可靠有效,可以完美地實(shí)現(xiàn)安卓系統(tǒng)中指定安卓應(yīng)用與其心相應(yīng)的分身應(yīng)用的并行運(yùn)行。
在本發(fā)明的一個(gè)實(shí)施例中,由于分身應(yīng)用對(duì)于安卓系統(tǒng)來(lái)說(shuō)是未知的,然而分身應(yīng)用在需要運(yùn)行某個(gè)組件的時(shí)候,分身應(yīng)用根據(jù)安卓應(yīng)用的機(jī)制還是會(huì)去向安卓系統(tǒng)請(qǐng)求調(diào)用相應(yīng)的組件,如果安卓系統(tǒng)接收到該調(diào)用消息,安卓系統(tǒng)會(huì)因?yàn)榘l(fā)送方未注冊(cè)而不對(duì)該調(diào)用進(jìn)行響應(yīng),導(dǎo)致分身應(yīng)用的調(diào)用失敗。為避免此情況并使得分身應(yīng)用能夠成功調(diào)用運(yùn)行所需的組件,需要阻止分身應(yīng)用向安卓系統(tǒng)發(fā)送的調(diào)用請(qǐng)求并根據(jù)調(diào)用請(qǐng)求為分身應(yīng)用選擇預(yù)留進(jìn)程運(yùn)行相應(yīng)的組件。因此,上述步驟S130當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬組件類(lèi)型的預(yù)留進(jìn)程包括:監(jiān)聽(tīng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)請(qǐng)求調(diào)用目標(biāo)組件的事件;當(dāng)監(jiān)聽(tīng)到該事件時(shí),禁止該事件繼續(xù)執(zhí)行;獲取該事件對(duì)應(yīng)的目標(biāo)組件的相關(guān)信息;根據(jù)所述目標(biāo)組件的相關(guān)信息確定所述目標(biāo)組件所屬的組件類(lèi)型,從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于該組件類(lèi)型的預(yù)留進(jìn)程。
具體地,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行包括:?jiǎn)?dòng)所選擇的預(yù)留進(jìn)程,加載所述目標(biāo)組件,根據(jù)所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)在該預(yù)留進(jìn)程中對(duì)所述目標(biāo)組件進(jìn)行實(shí)例化,使得實(shí)例化的目標(biāo)組件在該預(yù)留進(jìn)程中運(yùn)行。具體的實(shí)例化過(guò)程是根據(jù)Intent參數(shù)中的目標(biāo)組件的屬性數(shù)據(jù)通過(guò)classloader進(jìn)行類(lèi)的加載、上下文環(huán)境資源的初始化等,得到目標(biāo)組件的實(shí)例,可以根據(jù)Intent參數(shù)中的action數(shù)據(jù)進(jìn)行實(shí)際動(dòng)作內(nèi)容的操作。
Android四大基本組件分別是Activity,Service服務(wù),Content Provider內(nèi)容提供者(下文中寫(xiě)做Provider),BroadcastReceiver廣播接收器(下文中寫(xiě)做Receiver),簡(jiǎn)單介紹如下:
Activity:應(yīng)用程序中,一個(gè)Activity通常就是一個(gè)單獨(dú)的屏幕,它上面可以顯示一些控件也可以監(jiān)聽(tīng)并處理用戶(hù)的事件做出響應(yīng)。Activity之間通過(guò)Intent進(jìn)行通信。在Intent的描述結(jié)構(gòu)中,有兩個(gè)最重要的部分:動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。
BroadcastReceive廣播接收器:你的應(yīng)用可以使用它對(duì)外部事件進(jìn)行過(guò)濾只對(duì)感興趣的外部事件(如當(dāng)電話呼入時(shí),或者數(shù)據(jù)網(wǎng)絡(luò)可用時(shí))進(jìn)行接收并做出響應(yīng)。廣播接收器沒(méi)有用戶(hù)界面。然而,它們可以啟動(dòng)一個(gè)activity或serice來(lái)響應(yīng)它們收到的信息,或者用NotificationManager來(lái)通知用戶(hù)。通知可以用很多種方式來(lái)吸引用戶(hù)的注意力──閃動(dòng)背燈、震動(dòng)、播放聲音等。一般來(lái)說(shuō)是在狀態(tài)欄上放一個(gè)持久的圖標(biāo),用戶(hù)可以打開(kāi)它并獲取消息。
Service服務(wù):一個(gè)Service是一段長(zhǎng)生命周期的,沒(méi)有用戶(hù)界面的程序,可以用來(lái)開(kāi)發(fā)如監(jiān)控類(lèi)程序。比較好的一個(gè)例子就是一個(gè)正在從播放列表中播放歌曲的媒體播放器。在一個(gè)媒體播放器的應(yīng)用中,應(yīng)該會(huì)有多個(gè)activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂(lè)重放這個(gè)功能并沒(méi)有對(duì)應(yīng)的activity,因?yàn)槭褂谜弋?dāng)然會(huì)認(rèn)為在導(dǎo)航到其它屏幕時(shí)音樂(lè)應(yīng)該還在播放的。在這個(gè)例子中,媒體播放器這個(gè)activity會(huì)使用Context.startService()來(lái)啟動(dòng)一個(gè)service,從而可以在后臺(tái)保持音樂(lè)的播放。同時(shí),系統(tǒng)也將保持這個(gè)service一直執(zhí)行,直到這個(gè)service運(yùn)行結(jié)束。另外,我們還可以通過(guò)使用Context.bindService()方法,連接到一個(gè)service上(如果這個(gè)service還沒(méi)有運(yùn)行將啟動(dòng)它)。當(dāng)連接到一個(gè)service之后,我們還可以service提供的接口與它進(jìn)行通訊。拿媒體播放器這個(gè)例子來(lái)說(shuō),我們還可以進(jìn)行暫停、重播等操作。
Content Provider內(nèi)容提供者:android平臺(tái)提供了Content Provider使一個(gè)應(yīng)用程序的指定數(shù)據(jù)集提供給其他應(yīng)用程序。這些數(shù)據(jù)可以存儲(chǔ)在文件系統(tǒng)中、在一個(gè)SQLite數(shù)據(jù)庫(kù)、或以任何其他合理的方式,其他應(yīng)用可以通過(guò)ContentResolver類(lèi)(見(jiàn)ContentProviderAccessApp例子)從該內(nèi)容提供者中獲取或存入數(shù)據(jù).(相當(dāng)于在應(yīng)用外包了一層殼),只有需要在多個(gè)應(yīng)用程序間共享數(shù)據(jù)是才需要內(nèi)容提供者。例如,通訊錄數(shù)據(jù)被多個(gè)應(yīng)用程序使用,且必須存儲(chǔ)在一個(gè)內(nèi)容提供者中它的好處:統(tǒng)一數(shù)據(jù)訪問(wèn)方式。
也就是說(shuō),安卓系統(tǒng)中最常用到的組件包括這四種組件類(lèi)型,因此本方案在安卓系統(tǒng)中預(yù)先聲明預(yù)留進(jìn)程時(shí)可以包括適配于這四種組件類(lèi)型的預(yù)留進(jìn)程。那么本文分別從這四種組件類(lèi)型入手,分別說(shuō)明當(dāng)安卓應(yīng)用的分身應(yīng)用在運(yùn)行過(guò)程中需要調(diào)用每種類(lèi)型的組件時(shí)所需要的處理方式:
方案一,步驟S110在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Activity預(yù)留進(jìn)程,所述Activity預(yù)留進(jìn)程適配于Activity組件類(lèi)型。
當(dāng)所述目標(biāo)組件屬于Activity組件類(lèi)型時(shí),步驟S130從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行包括:?jiǎn)?dòng)一個(gè)Activity預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行。
由于Activity包括四種啟動(dòng)模式,啟動(dòng)模式launchMode方法是在apk的manifest文件中針對(duì)每一個(gè)Activity的android:launchMode屬性進(jìn)行設(shè)置的方式,共有四種屬性可以設(shè)置,分別是standard、singleTop、singleTask和singleInstanc。不同啟動(dòng)模式的Activity具有不同的生命周期,為了使得不同啟動(dòng)模式的Activity都能運(yùn)行在適配于Activity組件類(lèi)型的Activity預(yù)留進(jìn)程,為了有效地維護(hù)不同啟動(dòng)模式的Activity的生命周期。本方案維護(hù)了一個(gè)Activity任務(wù)棧,通過(guò)該Activity任務(wù)棧對(duì)不同啟動(dòng)模式的Activity的生命周期進(jìn)行維護(hù)。
則在所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程之前,圖1所示的方法進(jìn)一步包括:根據(jù)所述目標(biāo)組件的相關(guān)信息,判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù);是則,不再執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程的操作,根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用;否則,執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程并將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行的操作,并將所述目標(biāo)組件的運(yùn)行事件作為一個(gè)任務(wù)壓入所述Activity任務(wù)棧中。
當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTask模式時(shí),所述判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù)包括:判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用包括:將所述Activity任務(wù)棧中位于所述任務(wù)上方的其他任務(wù)銷(xiāo)毀,使得所述任務(wù)位于所述Activity任務(wù)棧的頂端;將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleInstance模式時(shí),所述判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù)包括:判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用包括:將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTop模式時(shí),所述判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù)包括:判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù)且所述任務(wù)位于所述Activity任務(wù)棧的頂端;所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用包括:將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
例如,在上述應(yīng)用場(chǎng)景中,對(duì)于standard模式,standard是默認(rèn)模式,即假設(shè)用戶(hù)在manifest中對(duì)Activity不指定android:launchMode的情況下,缺省啟動(dòng)模式即為standard。在啟動(dòng)一個(gè)以standard為launchMode的Activity時(shí),Ams只是簡(jiǎn)單的創(chuàng)建一個(gè)新的Activity實(shí)例,將其放到Activity任務(wù)棧(為了行文方便,后面將Activity任務(wù)棧簡(jiǎn)稱(chēng)AS),其TaskId則與啟動(dòng)這個(gè)Activity的調(diào)用者Activity相同(即就算創(chuàng)建一個(gè)新的進(jìn)程,但是其TaskId還是跟調(diào)用者一致的,以確保用戶(hù)回退操作時(shí)保持一致)。這種是最常見(jiàn)的使用方式。
對(duì)于singleTop模式,啟動(dòng)一個(gè)以singleTop為lauchMode的Activity時(shí),本方案的常駐服務(wù)會(huì)查詢(xún)AS:假如在AS頂端正是要啟動(dòng)的Activity實(shí)例,那么Ams就不會(huì)重新啟動(dòng)一個(gè)Activity實(shí)例,而是調(diào)用AS棧頂?shù)脑揂ctivity實(shí)例的OnNewIntent函數(shù)(自然不會(huì)修改原來(lái)的TaskId值);假如在AS棧頂不是該Activity的實(shí)例,那么就會(huì)創(chuàng)建一個(gè)新的實(shí)例,將其壓入AS,其TaskId與調(diào)用者Activity相同。這種方式主要用于避免自調(diào)自過(guò)程中,產(chǎn)生多個(gè)實(shí)例的情況。
對(duì)于singleTask模式,啟動(dòng)一個(gè)以singleTask為lauchMode的Activity時(shí),本方案中的常駐服務(wù)會(huì)查詢(xún)AS:如果AS內(nèi)有一個(gè)該類(lèi)Activity的實(shí)例,那么就會(huì)將該實(shí)例置于TS的頂端(原來(lái)位于該實(shí)例上面的其它同TaskId的activity實(shí)例,將被銷(xiāo)毀),并調(diào)用該實(shí)例的onNewIntent函數(shù);如果AS內(nèi)沒(méi)有該類(lèi)的實(shí)例,就會(huì)啟動(dòng)一個(gè)新的實(shí)例,將其壓入AS,其TaskID與啟動(dòng)它的調(diào)用者沒(méi)有必然關(guān)系,而是取決于該Activity所在apk進(jìn)程是否有TaskId,假如沒(méi)有就會(huì)創(chuàng)建一個(gè)新的TaskId。在實(shí)測(cè)中發(fā)現(xiàn),如果singleTask模式啟動(dòng)的Activity是AS中同TaskId的最底部一個(gè)(或被稱(chēng)謂Task棧的根實(shí)例),那么在通過(guò)桌面長(zhǎng)按,在近期任務(wù)中跳轉(zhuǎn)到Activity所在的任務(wù)時(shí),即使該Activity實(shí)例不是在棧頂,也會(huì)被置到棧頂(還會(huì)調(diào)用其onNewIntent函數(shù)),并將AS上同TaskId的其它Activity實(shí)例銷(xiāo)毀,具體可以通過(guò)附帶的demo來(lái)驗(yàn)證,其中TaskOne中的Activity1置成singleTask啟動(dòng)模式,其它均為默認(rèn)的standard。
對(duì)于singleInstance模式,啟動(dòng)一個(gè)以singleInstance為launchmode的Activity時(shí),假如AS中已經(jīng)有一個(gè)該類(lèi)實(shí)例,那么調(diào)用其onNewIntent函數(shù);否則就會(huì)創(chuàng)建一個(gè)新的TaskId,與該Activity所在的apk進(jìn)程完全不同的TaskId,而且這個(gè)TaskId值以后也不會(huì)被用于其他任何Activity實(shí)例中。
方案二,所述在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Service預(yù)留進(jìn)程,所述Service預(yù)留進(jìn)程適配于Service組件類(lèi)型。
當(dāng)所述目標(biāo)組件屬于Service組件類(lèi)型時(shí),上述啟動(dòng)所選擇的預(yù)留進(jìn)程,根據(jù)所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)在該預(yù)留進(jìn)程中對(duì)所述目標(biāo)組件進(jìn)行實(shí)例化,使得實(shí)例化的目標(biāo)組件在該預(yù)留進(jìn)程中運(yùn)行包括:?jiǎn)?dòng)一個(gè)Service預(yù)留進(jìn)程,將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)發(fā)送至所述Service預(yù)留進(jìn)程,使得所述Service預(yù)留進(jìn)程根據(jù)所述Intent參數(shù)返回一個(gè)對(duì)應(yīng)于所述目標(biāo)組件的Binder消息;根據(jù)所述Binder消息與所述目標(biāo)組件建立連接,使得所述目標(biāo)組件在所述Service預(yù)留進(jìn)程中加載并運(yùn)行。
上述過(guò)程要解決的是:將分身應(yīng)用真正需要調(diào)用的真實(shí)的目標(biāo)組件映射到Service預(yù)留進(jìn)程中,而且要使得該Service預(yù)留進(jìn)程能夠返回對(duì)應(yīng)于該真實(shí)的目標(biāo)組件的唯一Binder消息,這才能真正完整地實(shí)現(xiàn)對(duì)目標(biāo)組件的連接、加載和運(yùn)行。
具體地,可以通過(guò)哈希值驗(yàn)證的方式來(lái)找到Intent參數(shù)與目標(biāo)組件的映射關(guān)系,該方法進(jìn)一步包括:預(yù)存Binder消息與Intent參數(shù)的哈希值的映射關(guān)系表;所述將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)發(fā)送至所述Service預(yù)留進(jìn)程,使得所述Service預(yù)留進(jìn)程根據(jù)所述Intent參數(shù)返回一個(gè)對(duì)應(yīng)于所述目標(biāo)組件的Binder消息包括:計(jì)算所述Intent參數(shù)的哈希值,將所述哈希值發(fā)送至所述Service預(yù)留進(jìn)程,如果所述Intent參數(shù)的哈希值在所述映射關(guān)系表中,所述Service預(yù)留進(jìn)程返回所述映射關(guān)系表中與所述Intent參數(shù)的哈希值對(duì)應(yīng)的Binder消息。
方案三,在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Receiver預(yù)留進(jìn)程,所述Receiver預(yù)留進(jìn)程適配于Receiver組件類(lèi)型。
分身應(yīng)用在運(yùn)行過(guò)程中如果要使用Receiver組件,必然需要進(jìn)行注冊(cè),雖然其注冊(cè)行為不被安卓系統(tǒng)接納,但分身應(yīng)用還是會(huì)執(zhí)行注冊(cè)行為,Receiver組件的注冊(cè)行為包括靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè),靜態(tài)注冊(cè)是指關(guān)于Receiver組件的注冊(cè)信息寫(xiě)死在Manifest文件中,發(fā)生注冊(cè)時(shí)相應(yīng)的進(jìn)程還未運(yùn)行,因此在其需要運(yùn)行Receiver組件時(shí)需要為其選擇一個(gè)Receiver預(yù)留進(jìn)程,而動(dòng)態(tài)注冊(cè)是指在進(jìn)程運(yùn)行過(guò)程中向安卓系統(tǒng)發(fā)出的注冊(cè)聲明,發(fā)生注冊(cè)時(shí)相應(yīng)的進(jìn)程處于運(yùn)行狀態(tài),無(wú)需為Receiver組件選擇Receiver預(yù)留進(jìn)程。
其中,監(jiān)聽(tīng)安卓系統(tǒng)中發(fā)送廣播消息的事件包括:將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時(shí),確定監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件;圖1所示的方法進(jìn)一步包括:當(dāng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器均不符合所述廣播消息的的接收條件時(shí),放行所述廣播消息。
所述當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬的組件類(lèi)型的預(yù)留進(jìn)程包括:當(dāng)監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件時(shí),將符合所述廣播消息的的接收條件的虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的Receiver組件作為目標(biāo)組件,所述目標(biāo)組件屬于Receiver組件類(lèi)型;對(duì)于每個(gè)目標(biāo)組件,啟動(dòng)一個(gè)Receiver預(yù)留進(jìn)程,在該Receiver預(yù)留進(jìn)程加載并運(yùn)行所述目標(biāo)進(jìn)程。對(duì)靜態(tài)注冊(cè)過(guò)程進(jìn)行說(shuō)明如下:
圖1所示的方法進(jìn)一步包括:獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的Receiver組件的相關(guān)信息并保存至所述配置管理表中。
則所述將符合所述廣播消息的的接收條件的虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的Receiver組件作為目標(biāo)組件包括:判斷所述配置管理表中記錄的Receiver組件的相關(guān)信息是否符合所述廣播消息的接收條件。
Receiver和Activity不一樣,一個(gè)廣播發(fā)出之后可能有多個(gè)接受者,因此需要在廣播發(fā)出去之后,遍歷有多少個(gè)分身應(yīng)用的Receiver組件符合接收條件能夠作為廣播的接收者,如果找到分身應(yīng)用中有三個(gè)Receiver組件可以作為廣播的接收者,需要為每一個(gè)Receiver組件選擇一個(gè)Receiver預(yù)留進(jìn)程,多個(gè)Receiver預(yù)留進(jìn)程啟動(dòng)之后,再在各自里面加載真正的Receiver。
方案四,在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Provider預(yù)留進(jìn)程,所述Provider預(yù)留進(jìn)程適配于Provider組件類(lèi)型。
當(dāng)所述目標(biāo)組件屬于Provider組件類(lèi)型時(shí),所述從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行包括:選擇并啟動(dòng)一個(gè)Provider預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該P(yáng)rovider預(yù)留進(jìn)程中運(yùn)行。
真實(shí)的Provider的實(shí)現(xiàn)原理都是通過(guò)一個(gè)Uri來(lái)表示,Uri像一個(gè)協(xié)議有多個(gè)組成部分,例如:Uri(context|author|訪問(wèn)的節(jié)點(diǎn)),其中author是Provider的唯一標(biāo)識(shí),通過(guò)該唯一標(biāo)識(shí)來(lái)對(duì)真正的目標(biāo)組件進(jìn)行識(shí)別和加載。因此,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù);所述將所述目標(biāo)組件分配至該P(yáng)rovider預(yù)留進(jìn)程中運(yùn)行包括:將所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù)中的author參數(shù)傳遞給所述Provider預(yù)留進(jìn)程,使得所述Provider預(yù)留進(jìn)程根據(jù)所述author參數(shù)獲取到所述目標(biāo)組件的屬性數(shù)據(jù),根據(jù)所述目標(biāo)組件的屬性數(shù)據(jù)在所述Service預(yù)留進(jìn)程中加載并運(yùn)行所述目標(biāo)數(shù)據(jù)。
圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的安卓應(yīng)用的運(yùn)行管理架構(gòu)的示意圖。具體地,是安卓應(yīng)用的分身應(yīng)用的運(yùn)行管理架構(gòu),如圖2所示,此架構(gòu)的實(shí)現(xiàn)基于與安卓系統(tǒng)的交互上,向安卓系統(tǒng)預(yù)先聲明多個(gè)預(yù)留進(jìn)程,通過(guò)一個(gè)常駐服務(wù)對(duì)安卓應(yīng)用的分身應(yīng)用進(jìn)行統(tǒng)一管理,該常駐服務(wù)中包括:進(jìn)程處理,用于實(shí)現(xiàn)前文中所述的進(jìn)程管理過(guò)程;廣播中心,用于代理分身應(yīng)用進(jìn)行廣播消息的接收;預(yù)留進(jìn)程選擇管理器,用于在分身應(yīng)用需要時(shí)為其選擇適配的預(yù)留進(jìn)程;中轉(zhuǎn)橋,用于對(duì)獲取異步調(diào)用機(jī)制進(jìn)行中轉(zhuǎn)代理;還有上文中所維護(hù)的Activity任務(wù)棧;接口處理和賬戶(hù)系統(tǒng)。可以看出,該架構(gòu)可以通過(guò)模擬出安卓系統(tǒng)對(duì)于正常安裝的安卓應(yīng)用的運(yùn)行管理來(lái)實(shí)現(xiàn)對(duì)于分身應(yīng)用的運(yùn)行管理,十分可靠完備。此外,本架構(gòu)中還包括一個(gè)UI進(jìn)程,該進(jìn)程的運(yùn)行是依賴(lài)于安卓系統(tǒng)的,例如用戶(hù)在查詢(xún)一共有多少個(gè)分身應(yīng)用時(shí),UI進(jìn)程進(jìn)行相應(yīng)的運(yùn)行。該架構(gòu)形成一個(gè)完整的分身應(yīng)用的生態(tài)環(huán)境。
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的一種安卓應(yīng)用的進(jìn)程管理裝置的示意圖。如圖3所示,該安卓應(yīng)用的進(jìn)程管理裝置300包括:
信息配置單元310,適于在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程。
環(huán)境構(gòu)造單元320,適于構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中運(yùn)行。
常駐服務(wù)單元330,適于當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬的組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行。
可見(jiàn),圖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)而無(wú)法與安卓系統(tǒng)進(jìn)行組件調(diào)用的交互的問(wèn)題,本方案為不同組件類(lèi)型的組件分別預(yù)先聲明了預(yù)留進(jìn)程,在分身應(yīng)用需要運(yùn)行某種組件時(shí)為其提供相應(yīng)的預(yù)留進(jìn)程,此種方式不同于現(xiàn)有技術(shù)中常見(jiàn)的為具體的組件聲明具體的進(jìn)程的方式,預(yù)留進(jìn)程的管理方式更加靈活方便,對(duì)于未在安卓系統(tǒng)中進(jìn)行注冊(cè)的分身系統(tǒng)的運(yùn)行來(lái)說(shuō)也是十分可靠有效,可以完美地實(shí)現(xiàn)安卓系統(tǒng)中指定安卓應(yīng)用與其心相應(yīng)的分身應(yīng)用的并行運(yùn)行。
在本發(fā)明的一個(gè)實(shí)施例中,常駐服務(wù)單元330,適于監(jiān)聽(tīng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)請(qǐng)求調(diào)用目標(biāo)組件的事件;當(dāng)監(jiān)聽(tīng)到該事件時(shí),禁止該事件繼續(xù)執(zhí)行;獲取該事件對(duì)應(yīng)的目標(biāo)組件的相關(guān)信息;根據(jù)所述目標(biāo)組件的相關(guān)信息確定所述目標(biāo)組件所屬的組件類(lèi)型,從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于該組件類(lèi)型的預(yù)留進(jìn)程。
其中,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元330,適于啟動(dòng)所選擇的預(yù)留進(jìn)程,加載所述目標(biāo)組件,根據(jù)所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)在該預(yù)留進(jìn)程中對(duì)所述目標(biāo)組件進(jìn)行實(shí)例化,使得實(shí)例化的目標(biāo)組件在該預(yù)留進(jìn)程中運(yùn)行。
在具體的例子中,所述信息配置單元310,適于在安卓系統(tǒng)中預(yù)先聲明Activity預(yù)留進(jìn)程,所述Activity預(yù)留進(jìn)程適配于Activity組件類(lèi)型;所述常駐服務(wù)單元,適于當(dāng)所述目標(biāo)組件屬于Activity組件類(lèi)型時(shí),啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行。
則常駐服務(wù)單元330,進(jìn)一步適于維護(hù)一個(gè)Activity任務(wù)棧;還適于在所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程之前,根據(jù)所述目標(biāo)組件的相關(guān)信息,判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù);是則,不再執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程的操作,根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用;否則,執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程并將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行的操作,并將所述目標(biāo)組件的運(yùn)行事件作為一個(gè)任務(wù)壓入所述Activity任務(wù)棧中。
對(duì)應(yīng)于Activity組件的不同模式,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTask模式時(shí),所述常駐服務(wù)單元330,適于判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元330,適于將所述Activity任務(wù)棧中位于所述任務(wù)上方的其他任務(wù)銷(xiāo)毀,使得所述任務(wù)位于所述Activity任務(wù)棧的頂端;將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleInstance模式時(shí),所述常駐服務(wù)單元330,適于判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元330,適于將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTop模式時(shí),所述常駐服務(wù)單元330,適于判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù)且所述任務(wù)位于所述Activity任務(wù)棧的頂端;所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元330,適于將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
在另一個(gè)具體的例子中,所述信息配置單元310,適于在安卓系統(tǒng)中預(yù)先聲明Service預(yù)留進(jìn)程,所述Service預(yù)留進(jìn)程適配于Service組件類(lèi)型;
所述常駐服務(wù)單元,適于當(dāng)所述目標(biāo)組件屬于Service組件類(lèi)型時(shí),啟動(dòng)一個(gè)Service預(yù)留進(jìn)程,將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)發(fā)送至所述Service預(yù)留進(jìn)程,使得所述Service預(yù)留進(jìn)程根據(jù)所述Intent參數(shù)返回一個(gè)對(duì)應(yīng)于所述目標(biāo)組件的Binder消息;根據(jù)所述Binder消息與所述目標(biāo)組件建立連接,使得所述目標(biāo)組件在所述Service預(yù)留進(jìn)程中加載并運(yùn)行。
進(jìn)一步地,所述常駐服務(wù)單元330,還適于預(yù)存Binder消息與Intent參數(shù)的哈希值的映射關(guān)系表;在此基礎(chǔ)上,所述常駐服務(wù)單元330,適于計(jì)算所述Intent參數(shù)的哈希值,將所述哈希值發(fā)送至所述Service預(yù)留進(jìn)程,如果所述Intent參數(shù)的哈希值在所述映射關(guān)系表中,所述Service預(yù)留進(jìn)程返回所述映射關(guān)系表中與所述Intent參數(shù)的哈希值對(duì)應(yīng)的Binder消息。
在又一個(gè)具體的例子中,信息配置單元310,適于在安卓系統(tǒng)中預(yù)先聲明Receiver預(yù)留進(jìn)程,所述Receiver預(yù)留進(jìn)程適配于Receiver組件類(lèi)型;所述常駐服務(wù)單元330,適于當(dāng)監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件時(shí),將符合所述廣播消息的的接收條件的虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的Receiver組件作為目標(biāo)組件,所述目標(biāo)組件屬于Receiver組件類(lèi)型;對(duì)于每個(gè)目標(biāo)組件,啟動(dòng)一個(gè)Receiver預(yù)留進(jìn)程,在該Receiver預(yù)留進(jìn)程加載并運(yùn)行所述目標(biāo)進(jìn)程。
其中,常駐服務(wù)單元330,適于將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時(shí),確定監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件;以及進(jìn)一步地,常駐服務(wù)單元330,進(jìn)一步適于當(dāng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器均不符合所述廣播消息的的接收條件時(shí),放行所述廣播消息。
進(jìn)一步地,所述常駐服務(wù)單元330,還適于獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的Receiver組件的相關(guān)信息并保存至所述配置管理表中。則所述常駐服務(wù)單元330,適于判斷所述配置管理表中記錄的Receiver組件的相關(guān)信息是否符合所述廣播消息的接收條件。
在再一個(gè)具體的例子中,信息配置單元310,適于在安卓系統(tǒng)中預(yù)先聲明Provider預(yù)留進(jìn)程,所述Provider預(yù)留進(jìn)程適配于Provider組件類(lèi)型;常駐服務(wù)單元330,適于當(dāng)所述目標(biāo)組件屬于Provider組件類(lèi)型時(shí),選擇并啟動(dòng)一個(gè)Provider預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該P(yáng)rovider預(yù)留進(jìn)程中運(yùn)行。
其中,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù);常駐服務(wù)單元330,適于將所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù)中的author參數(shù)傳遞給所述Provider預(yù)留進(jìn)程,使得所述Provider預(yù)留進(jìn)程根據(jù)所述author參數(shù)獲取到所述目標(biāo)組件的屬性數(shù)據(jù),根據(jù)所述目標(biāo)組件的屬性數(shù)據(jù)在所述Service預(yù)留進(jìn)程中加載并運(yùn)行所述目標(biāo)數(shù)據(jù)。
需要說(shuō)明的是,圖3所示裝置的各實(shí)施例與圖1-圖2所示方法的各實(shí)施例對(duì)應(yīng)相同,上文已有詳細(xì)說(shuō)明,在此不再贅述。
綜上所述,在本發(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)而無(wú)法與安卓系統(tǒng)進(jìn)行組件調(diào)用的交互的問(wèn)題,本方案為不同組件類(lèi)型的組件分別預(yù)先聲明了預(yù)留進(jìn)程,在分身應(yīng)用需要運(yùn)行某種組件時(shí)為其提供相應(yīng)的預(yù)留進(jìn)程,此種方式不同于現(xiàn)有技術(shù)中常見(jiàn)的為具體的組件聲明具體的進(jìn)程的方式,預(yù)留進(jìn)程的管理方式更加靈活方便,對(duì)于未在安卓系統(tǒng)中進(jìn)行注冊(cè)的分身系統(tǒng)的運(yùn)行來(lái)說(shuō)也是十分可靠有效,可以完美地實(shí)現(xiàn)安卓系統(tǒng)中指定安卓應(yīng)用與其心相應(yīng)的分身應(yīng)用的并行運(yùn)行。
需要說(shuō)明的是:
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬裝置或者其它設(shè)備固有相關(guān)。各種通用裝置也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類(lèi)裝置所要求的結(jié)構(gòu)是顯而易見(jiàn)的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說(shuō)明書(shū)中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書(shū)的理解。
類(lèi)似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開(kāi)并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開(kāi)的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(quán)利要求書(shū)所反映的那樣,發(fā)明方面在于少于前面公開(kāi)的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書(shū)由此明確地并入該具體實(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è)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的所有特征以及如此公開(kāi)的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書(shū)中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
本發(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)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的安卓應(yīng)用的進(jìn)程管理裝置中的一些或者全部部件的一些或者全部功能。本發(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)行說(shuō)明而不是對(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ī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱(chēng)。
本發(fā)明公開(kāi)了A1、一種安卓應(yīng)用的進(jìn)程管理方法,其中,包括:
在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程;
構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中運(yùn)行;
當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬的組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行。
A2、如A1所述的方法,其中,所述當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬組件類(lèi)型的預(yù)留進(jìn)程包括:
監(jiān)聽(tīng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)請(qǐng)求調(diào)用目標(biāo)組件的事件;
當(dāng)監(jiān)聽(tīng)到該事件時(shí),禁止該事件繼續(xù)執(zhí)行;獲取該事件對(duì)應(yīng)的目標(biāo)組件的相關(guān)信息;
根據(jù)所述目標(biāo)組件的相關(guān)信息確定所述目標(biāo)組件所屬的組件類(lèi)型,從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于該組件類(lèi)型的預(yù)留進(jìn)程。
A3、如A2所述的方法,其中,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行包括:
啟動(dòng)所選擇的預(yù)留進(jìn)程,加載所述目標(biāo)組件,根據(jù)所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)在該預(yù)留進(jìn)程中對(duì)所述目標(biāo)組件進(jìn)行實(shí)例化,使得實(shí)例化的目標(biāo)組件在該預(yù)留進(jìn)程中運(yùn)行。
A4、如A2或A3所述的方法,其中,所述在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Activity預(yù)留進(jìn)程,所述Activity預(yù)留進(jìn)程適配于Activity組件類(lèi)型;
當(dāng)所述目標(biāo)組件屬于Activity組件類(lèi)型時(shí),所述從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行包括:?jiǎn)?dòng)一個(gè)Activity預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行。
A5、如A4所述的方法,其中,該方法進(jìn)一步包括:維護(hù)一個(gè)Activity任務(wù)棧;在所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程之前,該方法進(jìn)一步包括:
根據(jù)所述目標(biāo)組件的相關(guān)信息,判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù);
是則,不再執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程的操作,根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用;
否則,執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程并將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行的操作,并將所述目標(biāo)組件的運(yùn)行事件作為一個(gè)任務(wù)壓入所述Activity任務(wù)棧中。
A6、如A5所述的方法,其中,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTask模式時(shí),所述判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù)包括:判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用包括:
將所述Activity任務(wù)棧中位于所述任務(wù)上方的其他任務(wù)銷(xiāo)毀,使得所述任務(wù)位于所述Activity任務(wù)棧的頂端;
將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
A7、如A5所述的方法,其中,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleInstance模式時(shí),所述判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù)包括:判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用包括:將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
A8、如A5所述的方法,其中,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTop模式時(shí),所述判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù)包括:判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù)且所述任務(wù)位于所述Activity任務(wù)棧的頂端;
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用包括:將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
A9、如A3所述的方法,其中,所述在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Service預(yù)留進(jìn)程,所述Service預(yù)留進(jìn)程適配于Service組件類(lèi)型;
當(dāng)所述目標(biāo)組件屬于Service組件類(lèi)型時(shí),所述啟動(dòng)所選擇的預(yù)留進(jìn)程,根據(jù)所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)在該預(yù)留進(jìn)程中對(duì)所述目標(biāo)組件進(jìn)行實(shí)例化,使得實(shí)例化的目標(biāo)組件在該預(yù)留進(jìn)程中運(yùn)行包括:?jiǎn)?dòng)一個(gè)Service預(yù)留進(jìn)程,將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)發(fā)送至所述Service預(yù)留進(jìn)程,使得所述Service預(yù)留進(jìn)程根據(jù)所述Intent參數(shù)返回一個(gè)對(duì)應(yīng)于所述目標(biāo)組件的Binder消息;根據(jù)所述Binder消息與所述目標(biāo)組件建立連接,使得所述目標(biāo)組件在所述Service預(yù)留進(jìn)程中加載并運(yùn)行。
A10、如A9所述的方法,其中,該方法進(jìn)一步包括:預(yù)存Binder消息與Intent參數(shù)的哈希值的映射關(guān)系表;
所述將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)發(fā)送至所述Service預(yù)留進(jìn)程,使得所述Service預(yù)留進(jìn)程根據(jù)所述Intent參數(shù)返回一個(gè)對(duì)應(yīng)于所述目標(biāo)組件的Binder消息包括:計(jì)算所述Intent參數(shù)的哈希值,將所述哈希值發(fā)送至所述Service預(yù)留進(jìn)程,如果所述Intent參數(shù)的哈希值在所述映射關(guān)系表中,所述Service預(yù)留進(jìn)程返回所述映射關(guān)系表中與所述Intent參數(shù)的哈希值對(duì)應(yīng)的Binder消息。
A11、如A3所述的方法,其中,所述在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Receiver預(yù)留進(jìn)程,所述Receiver預(yù)留進(jìn)程適配于Receiver組件類(lèi)型;
所述當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬的組件類(lèi)型的預(yù)留進(jìn)程包括:當(dāng)監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件時(shí),將符合所述廣播消息的的接收條件的虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的Receiver組件作為目標(biāo)組件,所述目標(biāo)組件屬于Receiver組件類(lèi)型;對(duì)于每個(gè)目標(biāo)組件,啟動(dòng)一個(gè)Receiver預(yù)留進(jìn)程,在該Receiver預(yù)留進(jìn)程加載并運(yùn)行所述目標(biāo)進(jìn)程。
A12、如A11所述的方法,其中,監(jiān)聽(tīng)安卓系統(tǒng)中發(fā)送廣播消息的事件包括:
將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時(shí),確定監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件;
該方法進(jìn)一步包括:當(dāng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器均不符合所述廣播消息的的接收條件時(shí),放行所述廣播消息。
A13、如A11所述的方法,其中,該方法進(jìn)一步包括:獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的Receiver組件的相關(guān)信息并保存至所述配置管理表中。
則所述將符合所述廣播消息的的接收條件的虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的Receiver組件作為目標(biāo)組件包括:判斷所述配置管理表中記錄的Receiver組件的相關(guān)信息是否符合所述廣播消息的接收條件。
A14、如A2所述的方法,其中,所述在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程包括:在安卓系統(tǒng)中預(yù)先聲明Provider預(yù)留進(jìn)程,所述Provider預(yù)留進(jìn)程適配于Provider組件類(lèi)型;
當(dāng)所述目標(biāo)組件屬于Provider組件類(lèi)型時(shí),所述從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行包括:選擇并啟動(dòng)一個(gè)Provider預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該P(yáng)rovider預(yù)留進(jìn)程中運(yùn)行。
A15、如A14所述的方法,其中,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù);
所述將所述目標(biāo)組件分配至該P(yáng)rovider預(yù)留進(jìn)程中運(yùn)行包括:將所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù)中的author參數(shù)傳遞給所述Provider預(yù)留進(jìn)程,使得所述Provider預(yù)留進(jìn)程根據(jù)所述author參數(shù)獲取到所述目標(biāo)組件的屬性數(shù)據(jù),根據(jù)所述目標(biāo)組件的屬性數(shù)據(jù)在所述Service預(yù)留進(jìn)程中加載并運(yùn)行所述目標(biāo)數(shù)據(jù)。
本發(fā)明還公開(kāi)了B16、一種安卓應(yīng)用的進(jìn)程管理裝置,其中,包括:
信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明適配于各種組件類(lèi)型的預(yù)留進(jìn)程;
環(huán)境構(gòu)造單元,適于構(gòu)造虛擬機(jī)環(huán)境,將安卓系統(tǒng)中的一個(gè)或多個(gè)指定安卓應(yīng)用的分身應(yīng)用放入虛擬機(jī)中運(yùn)行;
常駐服務(wù)單元,適于當(dāng)指定安卓應(yīng)用的分身應(yīng)用需要運(yùn)行目標(biāo)組件時(shí),從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于所述目標(biāo)組件所屬的組件類(lèi)型的預(yù)留進(jìn)程,將所述目標(biāo)組件分配至所選擇的預(yù)留進(jìn)程中運(yùn)行。
B17、如B16所述的裝置,其中,
所述常駐服務(wù)單元,適于監(jiān)聽(tīng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用向安卓系統(tǒng)請(qǐng)求調(diào)用目標(biāo)組件的事件;當(dāng)監(jiān)聽(tīng)到該事件時(shí),禁止該事件繼續(xù)執(zhí)行;獲取該事件對(duì)應(yīng)的目標(biāo)組件的相關(guān)信息;根據(jù)所述目標(biāo)組件的相關(guān)信息確定所述目標(biāo)組件所屬的組件類(lèi)型,從預(yù)先聲明的預(yù)留進(jìn)程中選擇適配于該組件類(lèi)型的預(yù)留進(jìn)程。
B18、如B17所述的裝置,其中,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);
所述常駐服務(wù)單元,適于啟動(dòng)所選擇的預(yù)留進(jìn)程,加載所述目標(biāo)組件,根據(jù)所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)在該預(yù)留進(jìn)程中對(duì)所述目標(biāo)組件進(jìn)行實(shí)例化,使得實(shí)例化的目標(biāo)組件在該預(yù)留進(jìn)程中運(yùn)行。
B19、如B17或B18所述的裝置,其中,所述信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明Activity預(yù)留進(jìn)程,所述Activity預(yù)留進(jìn)程適配于Activity組件類(lèi)型;
所述常駐服務(wù)單元,適于當(dāng)所述目標(biāo)組件屬于Activity組件類(lèi)型時(shí),啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行。
B20、如B19所述的裝置,其中,
所述常駐服務(wù)單元,進(jìn)一步適于維護(hù)一個(gè)Activity任務(wù)棧;還適于在所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程之前,根據(jù)所述目標(biāo)組件的相關(guān)信息,判斷當(dāng)前所述Activity任務(wù)棧中是否存在關(guān)于所述目標(biāo)組件的符合預(yù)定條件的任務(wù);是則,不再執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程的操作,根據(jù)所述目標(biāo)組件的啟動(dòng)模式對(duì)所述任務(wù)進(jìn)行調(diào)用;否則,執(zhí)行所述啟動(dòng)一個(gè)Activity預(yù)留進(jìn)程并將所述目標(biāo)組件分配至該Activity預(yù)留進(jìn)程中運(yùn)行的操作,并將所述目標(biāo)組件的運(yùn)行事件作為一個(gè)任務(wù)壓入所述Activity任務(wù)棧中。
B21、如B20所述的裝置,其中,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTask模式時(shí),所述常駐服務(wù)單元,適于判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元,適于將所述Activity任務(wù)棧中位于所述任務(wù)上方的其他任務(wù)銷(xiāo)毀,使得所述任務(wù)位于所述Activity任務(wù)棧的頂端;將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
B22、如B20所述的裝置,其中,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleInstance模式時(shí),所述常駐服務(wù)單元,適于判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù);
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元,適于將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
B23、如B20所述的裝置,其中,當(dāng)所述目標(biāo)組件的啟動(dòng)模式是singleTop模式時(shí),所述常駐服務(wù)單元,適于判斷所述Activity任務(wù)棧中是否存在運(yùn)行所述目標(biāo)組件的任務(wù)且所述任務(wù)位于所述Activity任務(wù)棧的頂端;
所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù);所述常駐服務(wù)單元,適于將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)傳給所述任務(wù),將所述任務(wù)調(diào)至前臺(tái)。
B24、如B18所述的裝置,其中,所述信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明Service預(yù)留進(jìn)程,所述Service預(yù)留進(jìn)程適配于Service組件類(lèi)型;
所述常駐服務(wù)單元,適于當(dāng)所述目標(biāo)組件屬于Service組件類(lèi)型時(shí),啟動(dòng)一個(gè)Service預(yù)留進(jìn)程,將所述目標(biāo)組件對(duì)應(yīng)的Intent參數(shù)發(fā)送至所述Service預(yù)留進(jìn)程,使得所述Service預(yù)留進(jìn)程根據(jù)所述Intent參數(shù)返回一個(gè)對(duì)應(yīng)于所述目標(biāo)組件的Binder消息;根據(jù)所述Binder消息與所述目標(biāo)組件建立連接,使得所述目標(biāo)組件在所述Service預(yù)留進(jìn)程中加載并運(yùn)行。
B25、如B24所述的裝置,其中,所述常駐服務(wù)單元,進(jìn)一步適于預(yù)存Binder消息與Intent參數(shù)的哈希值的映射關(guān)系表;
所述常駐服務(wù)單元,適于計(jì)算所述Intent參數(shù)的哈希值,將所述哈希值發(fā)送至所述Service預(yù)留進(jìn)程,如果所述Intent參數(shù)的哈希值在所述映射關(guān)系表中,所述Service預(yù)留進(jìn)程返回所述映射關(guān)系表中與所述Intent參數(shù)的哈希值對(duì)應(yīng)的Binder消息。
B26、如B18所述的裝置,其中,所述信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明Receiver預(yù)留進(jìn)程,所述Receiver預(yù)留進(jìn)程適配于Receiver組件類(lèi)型;
所述常駐服務(wù)單元,適于當(dāng)監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件時(shí),將符合所述廣播消息的的接收條件的虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的Receiver組件作為目標(biāo)組件,所述目標(biāo)組件屬于Receiver組件類(lèi)型;對(duì)于每個(gè)目標(biāo)組件,啟動(dòng)一個(gè)Receiver預(yù)留進(jìn)程,在該Receiver預(yù)留進(jìn)程加載并運(yùn)行所述目標(biāo)進(jìn)程。
B27、如B26所述的裝置,其中,
所述常駐服務(wù)單元,適于將鉤子函數(shù)掛載在安卓系統(tǒng)中發(fā)送廣播消息的接口上,當(dāng)攔截到所述發(fā)送廣播消息的接口發(fā)送的廣播消息時(shí),確定監(jiān)聽(tīng)到安卓系統(tǒng)中發(fā)送廣播消息的事件;
所述常駐服務(wù)單元,進(jìn)一步適于當(dāng)虛擬機(jī)中的指定安卓應(yīng)用的分身應(yīng)用的廣播接收器均不符合所述廣播消息的的接收條件時(shí),放行所述廣播消息。
B28、如B26所述的裝置,其中,所述常駐服務(wù)單元,還適于獲取各指定安卓應(yīng)用的安裝包復(fù)件并保存至指定目錄,作為各指定安卓應(yīng)用的分身應(yīng)用的安裝包;解析各指定安卓應(yīng)用的分身應(yīng)用的安裝包中的配置文件,獲取各指定安卓應(yīng)用的分身應(yīng)用在相應(yīng)配置文件中所注冊(cè)的Receiver組件的相關(guān)信息并保存至所述配置管理表中。
則所述常駐服務(wù)單元,適于判斷所述配置管理表中記錄的Receiver組件的相關(guān)信息是否符合所述廣播消息的接收條件。
B29、如B17所述的裝置,其中,所述信息配置單元,適于在安卓系統(tǒng)中預(yù)先聲明Provider預(yù)留進(jìn)程,所述Provider預(yù)留進(jìn)程適配于Provider組件類(lèi)型;
所述常駐服務(wù)單元,適于當(dāng)所述目標(biāo)組件屬于Provider組件類(lèi)型時(shí),選擇并啟動(dòng)一個(gè)Provider預(yù)留進(jìn)程,將所述目標(biāo)組件分配至該P(yáng)rovider預(yù)留進(jìn)程中運(yùn)行。
B30、如B29所述的裝置,其中,所述目標(biāo)組件的相關(guān)信息包括:所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù);
所述常駐服務(wù)單元,適于將所述目標(biāo)組件對(duì)應(yīng)的Uri參數(shù)中的author參數(shù)傳遞給所述Provider預(yù)留進(jìn)程,使得所述Provider預(yù)留進(jìn)程根據(jù)所述author參數(shù)獲取到所述目標(biāo)組件的屬性數(shù)據(jù),根據(jù)所述目標(biāo)組件的屬性數(shù)據(jù)在所述Service預(yù)留進(jìn)程中加載并運(yùn)行所述目標(biāo)數(shù)據(jù)。