欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

啟動(dòng)插件服務(wù)的方法、裝置和終端設(shè)備與流程

文檔序號(hào):12824491閱讀:379來(lái)源:國(guó)知局
啟動(dòng)插件服務(wù)的方法、裝置和終端設(shè)備與流程

本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種啟動(dòng)插件服務(wù)的方法、裝置和終端設(shè)備。



背景技術(shù):

插件是一種遵循一定規(guī)范的應(yīng)用程序接口編寫(xiě)出來(lái)的程序,目前android系統(tǒng)使用插件提供的服務(wù)的方法包括:?jiǎn)?dòng)服務(wù)(startservice)、停止服務(wù)(stopservice)、綁定服務(wù)(bindservice)和解除綁定服務(wù)(unbindservice)。在android系統(tǒng)中使用插件提供的服務(wù)主要采用兩種方案來(lái)實(shí)現(xiàn):一種是通過(guò)在主程序中編寫(xiě)一個(gè)服務(wù)中介,利用這個(gè)服務(wù)中介通過(guò)反射機(jī)制來(lái)調(diào)用插件,其具體實(shí)現(xiàn)方法為:首先在主程序的androidmanifest.xml文件中聲明此服務(wù)中介,然后在主程序中編寫(xiě)此服務(wù)中介,此服務(wù)中介的所有函數(shù)都是通過(guò)反射機(jī)制調(diào)用插件內(nèi)部的函數(shù)來(lái)實(shí)現(xiàn);另一種是通過(guò)在主程序中預(yù)設(shè)一些服務(wù)坑位,利用這些服務(wù)坑位來(lái)加載插件提供的服務(wù),其具體實(shí)現(xiàn)方法為:首先預(yù)先在主程序的androidmanifest.xml文件中聲明多個(gè)虛擬的服務(wù)注冊(cè)信息,即服務(wù)坑位,然后為插件提供的服務(wù)分配相適配的服務(wù)坑位,將此服務(wù)加載到服務(wù)坑位所對(duì)應(yīng)的進(jìn)程空間中運(yùn)行。

上述現(xiàn)有的兩種方案雖然都能夠?qū)崿F(xiàn)對(duì)插件提供的服務(wù)的使用,然而,在具體實(shí)現(xiàn)過(guò)程中,我們發(fā)現(xiàn)上述現(xiàn)有的兩種方案都存在著一定的局限性:第一種方案,要升級(jí)插件提供的服務(wù)必須先升級(jí)主程序,只有在升級(jí)了主程序后才能夠使用升級(jí)后的服務(wù),需要進(jìn)行主程序升級(jí)的額外處理;第二種方案,由于預(yù)設(shè)的服務(wù)坑位數(shù)量有限,而服務(wù)常駐于后臺(tái),生命周期較長(zhǎng),這樣很快預(yù)設(shè)的服務(wù)坑位就會(huì)被用完,而如果預(yù)設(shè)坑位過(guò)多又會(huì)導(dǎo)致啟動(dòng)速度受到影響,當(dāng)?shù)谌交蛘咦约和ㄟ^(guò)binder獲取主程序應(yīng)用的信息時(shí),有可能會(huì)因信息過(guò)多而出現(xiàn)transactiontoolarge的異常。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明實(shí)施例要解決的一個(gè)技術(shù)問(wèn)題是:提供一種啟動(dòng)插件服務(wù)的方法、裝置和終端設(shè)備,可以在不需要設(shè)置坑位且不需要進(jìn)行額外處理的情況下,啟動(dòng)插件提供的服務(wù)。

為解決上述技術(shù)問(wèn)題,根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供一種啟動(dòng)插件服務(wù)的方法,包括:

通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息;

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)所述服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù);

其中,所述服務(wù)管理組件管理其所在的進(jìn)程中的所有服務(wù),所述服務(wù)管理組件與所述客戶(hù)端運(yùn)行在不同的進(jìn)程中。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息,包括:

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息調(diào)用所述服務(wù)管理組件的aidl接口對(duì)象的startservice函數(shù)。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)所述服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù),包括:

通過(guò)所述服務(wù)管理組件中繼承所述aidl接口的內(nèi)部類(lèi)對(duì)象訪問(wèn)所述服務(wù)管理組件核心類(lèi)的startservice函數(shù);其中所述服務(wù)管理組件的核心類(lèi)實(shí)現(xiàn)所述aidl接口。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)所述服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù),包括:

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在所述服務(wù)管理組件中是否保存有目標(biāo)服務(wù)安裝信息;

若在所述服務(wù)管理組件中保存有目標(biāo)服務(wù)安裝信息,獲取所述目標(biāo)服務(wù)安裝信息;

若在所述服務(wù)管理組件中未保存有目標(biāo)服務(wù)安裝信息,創(chuàng)建目標(biāo)服務(wù)安裝信息。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述創(chuàng)建目標(biāo)服務(wù)安裝信息,包括:

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在所述服務(wù)管理組件中是否保存有提供目標(biāo)服務(wù)的插件;

若在所述服務(wù)管理組件中保存有提供目標(biāo)服務(wù)的插件,從所述插件中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象;

若在所述服務(wù)管理組件中未保存有提供目標(biāo)服務(wù)的插件,從提供目標(biāo)服務(wù)的插件的安裝包中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象;

基于所述啟動(dòng)服務(wù)請(qǐng)求信息和所述目標(biāo)服務(wù)的serviceinfo對(duì)象,創(chuàng)建目標(biāo)服務(wù)安裝信息。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述創(chuàng)建目標(biāo)服務(wù)安裝信息之后,還包括:

在所述服務(wù)管理組件中保存所述目標(biāo)服務(wù)安裝信息。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述創(chuàng)建目標(biāo)服務(wù)安裝信息之后,還包括:

基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述獲取所述目標(biāo)服務(wù)安裝信息之后,還包括:

根據(jù)所述目標(biāo)服務(wù)安裝信息,檢測(cè)在所述服務(wù)管理組件中是否保存有目標(biāo)服務(wù);

若在所述服務(wù)管理組件中保存有目標(biāo)服務(wù),調(diào)用所述目標(biāo)服務(wù)的onstartcommand函數(shù);

若在所述服務(wù)管理組件中未保存有目標(biāo)服務(wù),基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù),包括:

獲取提供目標(biāo)服務(wù)的插件的context對(duì)象;

基于所述目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù);

初始化所述目標(biāo)服務(wù)。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述基于所述目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù),包括:

從提供目標(biāo)服務(wù)的插件的context對(duì)象獲取所述插件的類(lèi)加載器;

從所述目標(biāo)服務(wù)安裝信息獲取目標(biāo)服務(wù)的全類(lèi)名;

基于所述目標(biāo)服務(wù)的全類(lèi)名,通過(guò)反射機(jī)制利用所述插件的類(lèi)加載器獲取所述目標(biāo)服務(wù)的系統(tǒng)類(lèi)對(duì)象;

通過(guò)反射機(jī)制調(diào)用所述目標(biāo)服務(wù)的系統(tǒng)類(lèi)的newinstance來(lái)調(diào)用構(gòu)造函數(shù)創(chuàng)建目標(biāo)服務(wù)。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述初始化所述目標(biāo)服務(wù),包括:

通過(guò)反射機(jī)制調(diào)用所述目標(biāo)服務(wù)的attachbasecontext的函數(shù);

調(diào)用所述目標(biāo)服務(wù)的oncreate函數(shù)。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)之后,還包括:

在所述服務(wù)管理組件中保存所述目標(biāo)服務(wù)。

在基于本發(fā)明上述方法的另一個(gè)實(shí)施例中,所述基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)之后,還包括:

調(diào)用所述目標(biāo)服務(wù)的onstartcommand函數(shù)。

根據(jù)本發(fā)明實(shí)施例的另一個(gè)方面,提供一種啟動(dòng)插件服務(wù)的裝置,包括:

接收單元,用于通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息;

執(zhí)行單元,用于根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)所述服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù);

其中,所述服務(wù)管理組件管理其所在的進(jìn)程中的所有服務(wù),所述服務(wù)管理組件與所述客戶(hù)端運(yùn)行在不同的進(jìn)程中。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述接收單元,具體用于根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息調(diào)用所述服務(wù)管理組件的aidl接口對(duì)象的startservice函數(shù)。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述執(zhí)行單元,具體用于通過(guò)所述服務(wù)管理組件中繼承所述aidl接口的內(nèi)部類(lèi)對(duì)象訪問(wèn)所述服務(wù)管理組件核心類(lèi)的startservice函數(shù);其中,所述服務(wù)管理組件的核心類(lèi)實(shí)現(xiàn)所述aidl接口。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述執(zhí)行單元,包括:

第一檢測(cè)模塊,用于根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在所述服務(wù)管理組件中是否保存有目標(biāo)服務(wù)安裝信息;

獲取模塊,用于根據(jù)所述第一檢測(cè)模塊的檢測(cè)結(jié)果,響應(yīng)于在所述服務(wù)管理組件中保存有目標(biāo)服務(wù)安裝信息,獲取所述目標(biāo)服務(wù)安裝信息;

創(chuàng)建模塊,用于根據(jù)所述第一檢測(cè)模塊的檢測(cè)結(jié)果,響應(yīng)于在所述服務(wù)管理組件中未保存有目標(biāo)服務(wù)安裝信息,創(chuàng)建目標(biāo)服務(wù)安裝信息。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述創(chuàng)建模塊,具體用于:

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在所述服務(wù)管理組件中是否保存有提供目標(biāo)服務(wù)的插件;

若在所述服務(wù)管理組件中保存有提供目標(biāo)服務(wù)的插件,從所述插件中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象;

若在所述服務(wù)管理組件中未保存有提供目標(biāo)服務(wù)的插件,從提供目標(biāo)服務(wù)的插件的安裝包中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象;

基于所述啟動(dòng)服務(wù)請(qǐng)求信息和所述目標(biāo)服務(wù)的serviceinfo對(duì)象,創(chuàng)建目標(biāo)服務(wù)安裝信息。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述執(zhí)行單元,還包括:

第一存儲(chǔ)模塊,用于在所述服務(wù)管理組件中保存所述目標(biāo)服務(wù)安裝信息。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述執(zhí)行單元,還包括:

安裝模塊,用于在所述創(chuàng)建模塊創(chuàng)建目標(biāo)服務(wù)安裝信息之后,基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述執(zhí)行單元,還包括:

第二檢測(cè)模塊,用于根據(jù)所述目標(biāo)服務(wù)安裝信息,檢測(cè)在所述服務(wù)管理組件中是否保存有目標(biāo)服務(wù);

執(zhí)行模塊,用于根據(jù)所述第二檢測(cè)模塊的檢測(cè)結(jié)果,響應(yīng)于在所述服務(wù)管理組件中保存有目標(biāo)服務(wù),調(diào)用所述目標(biāo)服務(wù)的onstartcommand函數(shù);

所述安裝模塊,還用于根據(jù)所述第二檢測(cè)模塊的檢測(cè)結(jié)果,響應(yīng)于在所述服務(wù)管理組件中未保存有目標(biāo)服務(wù),基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述安裝模塊,具體用于:

獲取提供目標(biāo)服務(wù)的插件的context對(duì)象;

基于所述目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù);

初始化所述目標(biāo)服務(wù)。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述安裝模塊基于所述目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù),具體用于:

從提供目標(biāo)服務(wù)的插件的context對(duì)象獲取所述插件的類(lèi)加載器;

從所述目標(biāo)服務(wù)安裝信息獲取目標(biāo)服務(wù)的全類(lèi)名;

基于所述目標(biāo)服務(wù)的全類(lèi)名,通過(guò)反射機(jī)制利用所述插件的類(lèi)加載器獲取所述目標(biāo)服務(wù)的系統(tǒng)類(lèi)對(duì)象;

通過(guò)反射機(jī)制調(diào)用所述目標(biāo)服務(wù)的系統(tǒng)類(lèi)的newinstance來(lái)調(diào)用構(gòu)造函數(shù)創(chuàng)建目標(biāo)服務(wù)。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述安裝模塊初始化所述目標(biāo)服務(wù),具體用于:

通過(guò)反射機(jī)制調(diào)用所述目標(biāo)服務(wù)的attachbasecontext的函數(shù);

調(diào)用所述目標(biāo)服務(wù)的oncreate函數(shù)。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述執(zhí)行單元,還包括:

第二存儲(chǔ)模塊,用于在所述服務(wù)管理組件中保存所述目標(biāo)服務(wù)。

在基于本發(fā)明上述裝置的另一個(gè)實(shí)施例中,所述執(zhí)行模塊,還用于在所述安裝模塊基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)之后,調(diào)用所述目標(biāo)服務(wù)的onstartcommand函數(shù)。

根據(jù)本發(fā)明實(shí)施例的再一個(gè)方面,提供的一種終端設(shè)備,包括:處理器和存儲(chǔ)器;其中,

所述存儲(chǔ)器用于存儲(chǔ)上述任一實(shí)施例所述的啟動(dòng)插件服務(wù)的方法的程序;

所述處理器用于執(zhí)行所述存儲(chǔ)器中存儲(chǔ)的所述啟動(dòng)插件服務(wù)的方法的程序。

基于本發(fā)明上述實(shí)施例提供的啟動(dòng)插件服務(wù)的方法、裝置和終端設(shè)備,通過(guò)為服務(wù)端每個(gè)進(jìn)程設(shè)置服務(wù)管理組件,管理其所在進(jìn)程中的所有服務(wù),當(dāng)通過(guò)服務(wù)管理組件的binder對(duì)象接收到客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息后,根據(jù)此啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù),當(dāng)目標(biāo)服務(wù)與客戶(hù)端運(yùn)行在不同的進(jìn)程中時(shí),可以實(shí)現(xiàn)對(duì)目標(biāo)服務(wù)的啟動(dòng),由于本發(fā)明實(shí)施例是通過(guò)設(shè)置于每一進(jìn)程中的服務(wù)管理組件對(duì)進(jìn)程中的所有服務(wù)進(jìn)行管理,因此其既不需要在主程序的androidmanifest.xml文件中預(yù)設(shè)服務(wù)坑位,也不需要在服務(wù)升級(jí)時(shí)對(duì)主程序進(jìn)行升級(jí)的額外處理,即可實(shí)現(xiàn)對(duì)插件提供的服務(wù)的啟動(dòng)。

附圖說(shuō)明

構(gòu)成說(shuō)明書(shū)的一部分的附圖描述了本發(fā)明的實(shí)施例,并且連同描述一起用于解釋本發(fā)明的原理。

參照附圖,根據(jù)下面的詳細(xì)描述,可以更加清楚地理解本發(fā)明,其中:

圖1是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的方法的一個(gè)實(shí)施例的流程圖。

圖2是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的方法的另一個(gè)實(shí)施例的流程圖。

圖3是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的方法的又一個(gè)實(shí)施例的流程圖。

圖4是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的方法的再一個(gè)實(shí)施例的流程圖。

圖5是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的裝置的一個(gè)實(shí)施例的結(jié)構(gòu)圖。

圖6是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的裝置的另一個(gè)實(shí)施例的結(jié)構(gòu)圖。

圖7是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的裝置的又一個(gè)實(shí)施例的結(jié)構(gòu)圖。

圖8是與本發(fā)明實(shí)施例提供的終端設(shè)備相關(guān)的手機(jī)的部分結(jié)構(gòu)的框圖。

具體實(shí)施方式

現(xiàn)在將參照附圖來(lái)詳細(xì)描述本發(fā)明的各種示例性實(shí)施例。應(yīng)注意到:除非另外具體說(shuō)明,否則在這些實(shí)施例中闡述的部件的相對(duì)布置、數(shù)字表達(dá)式和數(shù)值不限制本發(fā)明的范圍。

同時(shí),應(yīng)當(dāng)明白,為了便于描述,附圖中所示出的各個(gè)部分的尺寸并不是按照實(shí)際的比例關(guān)系繪制的。

以下對(duì)至少一個(gè)示例性實(shí)施例的描述實(shí)際上僅僅是說(shuō)明性的,決不作為對(duì)本發(fā)明及其應(yīng)用或使用的任何限制。

對(duì)于相關(guān)領(lǐng)域普通技術(shù)人員已知的技術(shù)、方法和設(shè)備可能不作詳細(xì)討論,但在適當(dāng)情況下,所述技術(shù)、方法和設(shè)備應(yīng)當(dāng)被視為說(shuō)明書(shū)的一部分。

應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類(lèi)似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步討論。

圖1是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的方法的一個(gè)實(shí)施例的流程圖。如圖1所示,該實(shí)施例的方法包括:

s102,通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息。

s104,根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù)。

其中,目標(biāo)服務(wù)為插件提供的服務(wù),例如為android系統(tǒng)的一個(gè)后臺(tái)服務(wù),服務(wù)所在的進(jìn)程通常會(huì)在androidmanifest.xml文件中的<service>標(biāo)簽中的android:process中進(jìn)行指定。客戶(hù)端為調(diào)用服務(wù)的一方,實(shí)施服務(wù)的一方為服務(wù)端,例如清理插件要調(diào)用備份插件中的備份服務(wù)來(lái)做清理前的備份,則清理插件的一方為客戶(hù)端,提供備份服務(wù)的一方為服務(wù)端,客戶(hù)端與服務(wù)端運(yùn)行在不同的進(jìn)程中。在服務(wù)端的每一個(gè)進(jìn)程中都設(shè)有一個(gè)服務(wù)管理組件,通過(guò)服務(wù)管理組件來(lái)管理其所在的進(jìn)程中的所有服務(wù)。

在一個(gè)具體實(shí)施例中,啟動(dòng)服務(wù)請(qǐng)求信息可以包括:intent對(duì)象、context對(duì)象和messenger對(duì)象。其中,intent是android系統(tǒng)中對(duì)執(zhí)行一次操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)和附加數(shù)據(jù)的描述,android系統(tǒng)根據(jù)此intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,將intent傳遞給調(diào)用的組件,完成組件的調(diào)用。context是描述一個(gè)應(yīng)用程序環(huán)境的信息,通過(guò)context可以獲取應(yīng)用程序的資源和類(lèi),也包括一些應(yīng)用級(jí)別操作。messenger是由客戶(hù)端傳遞來(lái)的用來(lái)標(biāo)記客戶(hù)端的唯一標(biāo)識(shí),也可用做與客戶(hù)端的發(fā)送消息服務(wù)。

具體實(shí)現(xiàn)中,操作s102可以根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息調(diào)用服務(wù)管理組件的aidl接口對(duì)象的startservice函數(shù),操作s104可以通過(guò)服務(wù)管理組件中繼承aidl接口的內(nèi)部類(lèi)對(duì)象訪問(wèn)服務(wù)管理組件核心類(lèi)的startservice函數(shù)來(lái)啟動(dòng)目標(biāo)服務(wù),其中服務(wù)管理組件的核心類(lèi)實(shí)現(xiàn)aidl接口。

在一個(gè)具體實(shí)施例中,ipluginserviceserver接口對(duì)象為服務(wù)管理組件的aidl接口對(duì)象,ipluginserviceserver接口是服務(wù)管理組件的核心接口,pluginserviceserver類(lèi)是服務(wù)管理組件的核心類(lèi),是ipluginserviceserver接口的具體實(shí)現(xiàn),服務(wù)管理組件通過(guò)核心接口與核心類(lèi)共同實(shí)現(xiàn)服務(wù)端的服務(wù)調(diào)度、提供等工作。由于ipluginserviceserver接口對(duì)象是binder對(duì)象的proxy,因此需要在目標(biāo)服務(wù)所在的進(jìn)程中實(shí)現(xiàn)ipluignserviceserver.stub類(lèi),ipluignserviceserver.stub類(lèi)是pluginserviceserver類(lèi)的內(nèi)部類(lèi),繼承了ipluginserviceserver接口,實(shí)現(xiàn)其基礎(chǔ)功能,并最終跳轉(zhuǎn)到pluginserviceserver類(lèi)中進(jìn)行相應(yīng)的處理;其中ipluginserviceserver接口聲明了startservice函數(shù),內(nèi)部類(lèi)ipluignserviceserver.stub定義了startservice函數(shù),pluginserviceserver類(lèi)實(shí)現(xiàn)了startservice函數(shù)。

其中,在服務(wù)管理組件中實(shí)現(xiàn)ipluignserviceserver.stub類(lèi),并對(duì)其初始化的操作包括:創(chuàng)建或獲取pluginserviceserver對(duì)象,創(chuàng)建或獲取pluginserviceserver.stub對(duì)象,及調(diào)用pluginserviceserver.stub中的任一方法,跳轉(zhuǎn)到pluginserviceserver。首先,檢測(cè)在服務(wù)管理組件中是否保存有pluginserviceserver對(duì)象;若在服務(wù)管理組件中保存有pluginserviceserver對(duì)象,獲取pluginserviceserver對(duì)象;否則,若在服務(wù)管理組件中未保存有pluginserviceserver對(duì)象,創(chuàng)建pluginserviceserver對(duì)象;然后,檢測(cè)在服務(wù)管理組件中是否保存有pluginserviceserver.stub對(duì)象;若在服務(wù)管理組件中保存有pluginserviceserver.stub對(duì)象,獲取pluginserviceserver.stub對(duì)象;否則,若在服務(wù)管理組件中未保存有pluginserviceserver.stub對(duì)象,創(chuàng)建pluginserviceserver.stub對(duì)象;最后,調(diào)用pluginserviceserver.stub中的任一方法,跳轉(zhuǎn)到pluginserviceserver。

具體地,創(chuàng)建pluginserviceserver對(duì)象可以通過(guò)調(diào)用ipluginhost接口或ipluginclient接口的fetchserviceserver函數(shù)獲取ipluginserviceserver接口對(duì)象來(lái)實(shí)現(xiàn)。其具體代碼的示例如下:

其中ipluginhost接口為常駐進(jìn)程的接口,而ipluginclient接口為除常駐進(jìn)程外其它進(jìn)程的接口,mservicemgr對(duì)象的類(lèi)為pluginserviceserver,mservicemgr對(duì)象通過(guò)調(diào)用getservice函數(shù)獲取ipluginserviceserver.stub類(lèi)。

創(chuàng)建pluginserviceserver.stub對(duì)象可以通過(guò)調(diào)用getservice函數(shù)來(lái)實(shí)現(xiàn)。其具體代碼的示例如下:

在一個(gè)具體實(shí)施例中,startservice函數(shù)的具體代碼的示例如下:

其中,在該函數(shù)中首先復(fù)制了一份intent對(duì)象,如果客戶(hù)端和目標(biāo)服務(wù)在同一個(gè)進(jìn)程中,一旦目標(biāo)服務(wù)修改了intent對(duì)象,客戶(hù)端也會(huì)對(duì)應(yīng)被修改,這樣會(huì)出現(xiàn)不可預(yù)知的問(wèn)題,因此需要在函數(shù)中首先復(fù)制一份intent對(duì)象來(lái)做各種操作,以防止出現(xiàn)上面的問(wèn)題。復(fù)制intent對(duì)象的具體代碼的示例如下:

privateintentcloneintentlocked(intentintent){

returnnewintent(intent);

}

然后該函數(shù)基于intent對(duì)象通過(guò)retrieveservicelocked函數(shù)來(lái)獲得servicerecord對(duì)象,其中servicerecord對(duì)象記錄了目標(biāo)服務(wù)的安裝信息,其中在獲得servicerecord對(duì)象的過(guò)程中可能會(huì)涉及插件信息的獲取。之后若目標(biāo)服務(wù)未安裝,則通過(guò)installserviceifneededlocked函數(shù)嘗試安裝目標(biāo)服務(wù)。最后調(diào)用目標(biāo)服務(wù)的onstartcommand函數(shù),以及直接返回目標(biāo)服務(wù)的全類(lèi)名componentname,表示目標(biāo)服務(wù)已經(jīng)成功啟動(dòng)。

基于本發(fā)明實(shí)施例提供的啟動(dòng)插件服務(wù)的方法,通過(guò)為服務(wù)端每個(gè)進(jìn)程設(shè)置服務(wù)管理組件,管理其所在進(jìn)程中的所有服務(wù),當(dāng)通過(guò)服務(wù)管理組件的binder對(duì)象接收到客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息后,根據(jù)此啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù),當(dāng)目標(biāo)服務(wù)與客戶(hù)端運(yùn)行在不同的進(jìn)程中時(shí),可以實(shí)現(xiàn)對(duì)目標(biāo)服務(wù)的啟動(dòng),由于本發(fā)明實(shí)施例是通過(guò)設(shè)置于每一進(jìn)程中的服務(wù)管理組件對(duì)進(jìn)程中的所有服務(wù)進(jìn)行管理,因此其既不需要在主程序的androidmanifest.xml文件中預(yù)設(shè)服務(wù)坑位,也不需要在服務(wù)升級(jí)時(shí)對(duì)主程序進(jìn)行升級(jí)的額外處理,即可實(shí)現(xiàn)對(duì)插件提供的服務(wù)的啟動(dòng)。

圖2是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的方法的另一個(gè)實(shí)施例的流程圖。如圖2所示,該實(shí)施例的方法包括:

s202,通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息。

s204,根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在服務(wù)管理組件中是否保存有目標(biāo)服務(wù)安裝信息。

若在服務(wù)管理組件中保存有目標(biāo)服務(wù)安裝信息,執(zhí)行操作s206;否者,若在服務(wù)管理組件中未保存有目標(biāo)服務(wù)安裝信息,執(zhí)行操作s208。

s206,獲取目標(biāo)服務(wù)安裝信息。

s208,創(chuàng)建目標(biāo)服務(wù)安裝信息。

具體實(shí)現(xiàn)中,操作s208可以首先根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在服務(wù)管理組件中是否保存有提供目標(biāo)服務(wù)的插件,若在服務(wù)管理組件中保存有提供目標(biāo)服務(wù)的插件,則從插件中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象,否則,若在服務(wù)管理組件中未保存有提供目標(biāo)服務(wù)的插件,則從提供目標(biāo)服務(wù)的插件的安裝包中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象,最后基于啟動(dòng)服務(wù)請(qǐng)求信息和所獲得的目標(biāo)服務(wù)的serviceinfo對(duì)象,創(chuàng)建目標(biāo)服務(wù)安裝信息。

進(jìn)一步,在操作s208之后,該實(shí)施例的啟動(dòng)插件服務(wù)的方法還包括:操作s210,基于目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

具體實(shí)現(xiàn)中,在操作s208之后,還可以包括:在服務(wù)管理組件中保存目標(biāo)服務(wù)安裝信息的操作,以在下一次啟動(dòng)目標(biāo)服務(wù)時(shí)可以直接從服務(wù)管理組件中獲取目標(biāo)服務(wù)安裝信息。

在一個(gè)具體實(shí)施例中,操作s204至操作s208,首先是以目標(biāo)服務(wù)的全類(lèi)名componentname和啟動(dòng)服務(wù)請(qǐng)求信息中的intent對(duì)象,在服務(wù)管理組件的servicerecord緩存表中尋找與其相匹配的servicerecord對(duì)象,其中servicerecord緩存表中記錄有服務(wù)管理組件所在的進(jìn)程中所有已安裝的服務(wù)的安裝信息,servicerecord對(duì)象為目標(biāo)服務(wù)安裝信息,若在服務(wù)管理組件的servicerecord緩存表中找到servicerecord對(duì)象,獲取servicedrecord對(duì)象,表示目標(biāo)服務(wù)已經(jīng)安裝,若在服務(wù)管理組件的servicerecord緩存表中未找到servicerecord對(duì)象,表示目標(biāo)服務(wù)尚未安裝,創(chuàng)建servicedrecord對(duì)象;然后從目標(biāo)服務(wù)的全類(lèi)名componentname中獲取插件名,通過(guò)與插件名對(duì)應(yīng)的插件化框架判斷在服務(wù)管理組件中是否存在該插件,若在服務(wù)管理組件中存在該插件,則可以使用它提供的服務(wù),此時(shí)從插件中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象,例如從插件中預(yù)設(shè)的componentlist對(duì)象中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象,其中componentlist對(duì)象保存有插件的packageinfo對(duì)象,若在服務(wù)管理組件中不存在該插件,則需要下載該插件,從插件的安裝包中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象;最后基于啟動(dòng)服務(wù)請(qǐng)求信息和目標(biāo)服務(wù)的serviceinfo對(duì)象創(chuàng)建目標(biāo)服務(wù)的servicerecord對(duì)象,并將其保存到servicerecord緩存表和系統(tǒng)的intent.filtercomparison表中,其中intent.filtercomparison表用來(lái)進(jìn)行intent對(duì)比。上述操作的具體代碼的示例如下:

其中,servicerecord類(lèi)包括:name,用來(lái)記錄服務(wù)的全類(lèi)名,以系統(tǒng)的componentname對(duì)象來(lái)封裝,其中componentname對(duì)象的key為插件名,value為類(lèi)全名;plugin,用來(lái)記錄服務(wù)所屬的插件的名字,也即為name.getpackagename()的結(jié)果,以字符串來(lái)表示;classname,用來(lái)記錄服務(wù)的類(lèi)全名,也即為name.getclassname()的結(jié)果,以字符串來(lái)表示;intent,用來(lái)記錄一些服務(wù)中的過(guò)濾條件,例如action、intentfilter等,以方便之后讀取,并做篩選;serviceinfo,用來(lái)記錄插件的androidmanifest.xml中描述的服務(wù)信息,為系統(tǒng)的serviceinfo對(duì)象;service,用來(lái)記錄服務(wù)對(duì)象,是在服務(wù)安裝成功后創(chuàng)建的,為核心字段;startrequested,用來(lái)記錄是否已啟動(dòng)服務(wù),并調(diào)用onstartcommand,在解除綁定服務(wù)和停止服務(wù)時(shí)使用。

圖3是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的方法的又一個(gè)實(shí)施例的流程圖。如圖3所示,該實(shí)施例的方法包括:

s302,通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息。

s304,根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在服務(wù)管理組件中是否保存有目標(biāo)服務(wù)安裝信息。

若在服務(wù)管理組件中保存有目標(biāo)服務(wù)安裝信息,執(zhí)行操作s306;否者,若在服務(wù)管理組件中未保存有目標(biāo)服務(wù)安裝信息,執(zhí)行操作s308。

s308,創(chuàng)建目標(biāo)服務(wù)安裝信息。

s306,獲取目標(biāo)服務(wù)安裝信息。

s310,根據(jù)目標(biāo)服務(wù)安裝信息,檢測(cè)在服務(wù)管理組件中是否保存有目標(biāo)服務(wù)。

若在服務(wù)管理組件中保存有目標(biāo)服務(wù),執(zhí)行操作314;否則,若在服務(wù)管理組件中未保存有目標(biāo)服務(wù),執(zhí)行操作s312。

s312,基于目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

s314,調(diào)用目標(biāo)服務(wù)的onstartcommand函數(shù)。

進(jìn)一步,在操作s308之后,還執(zhí)行操作s312,基于目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)的操作。

具體實(shí)現(xiàn)中,在操作s308之后,還可以包括:在服務(wù)管理組件中保存目標(biāo)服務(wù)安裝信息的操作,以在下一次啟動(dòng)目標(biāo)服務(wù)時(shí)可以直接從服務(wù)管理組件中獲取目標(biāo)服務(wù)安裝信息。

進(jìn)一步,在操作s312之后,還執(zhí)行操作s314,調(diào)用目標(biāo)服務(wù)的onstartcommand函數(shù)的操作。

具體實(shí)現(xiàn)中,在操作s312之后,還可以包括:在服務(wù)管理組件中保存目標(biāo)服務(wù)的操作,以在下一次啟動(dòng)目標(biāo)服務(wù)時(shí)可以直接從服務(wù)管理組件中獲取目標(biāo)服務(wù)。

在一個(gè)具體實(shí)施例中,操作s310至操作s314,首先根據(jù)所獲得的servicerecord對(duì)象判斷在服務(wù)管理組件中是否存在對(duì)應(yīng)的服務(wù),其中servicerecord緩存表中不僅記錄有服務(wù)管理組件所在的進(jìn)程中所有已安裝的服務(wù)的安裝信息,還記錄有服務(wù)管理組件所在的進(jìn)程中所有準(zhǔn)備安裝的服務(wù)的安裝信息,若在服務(wù)管理組件中存在對(duì)應(yīng)的服務(wù),表示之前已經(jīng)成功安裝了該服務(wù),直接調(diào)用onstartcommand函數(shù)即可,若在服務(wù)管理組件中不存在對(duì)應(yīng)的服務(wù),表示之前并未成功安裝該服務(wù),需要開(kāi)始嘗試安裝該服務(wù)。其具體代碼的示例如下:

圖4是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的方法的再一個(gè)實(shí)施例的流程圖。如圖4所示,該實(shí)施例提供了一種基于目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)的方法,該方法包括:

s402,獲取提供目標(biāo)服務(wù)的插件的context對(duì)象。

s404,基于目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù)。

s406,初始化目標(biāo)服務(wù)。

具體實(shí)現(xiàn)中,操作s404可以包括:從提供目標(biāo)服務(wù)的插件的context對(duì)象獲取插件的類(lèi)加載器,從目標(biāo)服務(wù)安裝信息獲取目標(biāo)服務(wù)的全類(lèi)名,基于目標(biāo)服務(wù)的全類(lèi)名,通過(guò)反射機(jī)制利用插件的類(lèi)加載器獲取目標(biāo)服務(wù)的系統(tǒng)類(lèi)對(duì)象,通過(guò)反射機(jī)制調(diào)用目標(biāo)服務(wù)的系統(tǒng)類(lèi)的newinstance來(lái)調(diào)用構(gòu)造函數(shù)創(chuàng)建目標(biāo)服務(wù)。

具體實(shí)現(xiàn)中,操作s406可以包括:通過(guò)反射機(jī)制調(diào)用目標(biāo)服務(wù)的attachbasecontext的函數(shù);以及調(diào)用目標(biāo)服務(wù)的oncreate函數(shù)。

其中,在安裝目標(biāo)服務(wù)之后,在服務(wù)管理組件中保存目標(biāo)服務(wù)的操作,具體是在服務(wù)管理組件中保存初始化后的目標(biāo)服務(wù),以在下一次啟動(dòng)目標(biāo)服務(wù)時(shí)能夠直接從服務(wù)管理組件中獲取初始化后的目標(biāo)服務(wù)。

在一個(gè)具體實(shí)施例中,操作402至操作406,首先獲取提供目標(biāo)服務(wù)的插件的context對(duì)象,以通過(guò)它來(lái)獲取classloader對(duì)象,以及將其作為目標(biāo)服務(wù)的basecontext,然后從提供目標(biāo)服務(wù)的插件的context對(duì)象獲取插件的classloader對(duì)象,以便通過(guò)反射機(jī)制來(lái)創(chuàng)建目標(biāo)服務(wù),之后通過(guò)反射機(jī)制來(lái)創(chuàng)建目標(biāo)服務(wù);其具體包括以下三個(gè)步驟:從目標(biāo)服務(wù)的servicerecord對(duì)象的serviceinfo中的name字段獲取目標(biāo)服務(wù)的全類(lèi)名,通過(guò)反射機(jī)制利用插件的classloader對(duì)象來(lái)獲取目標(biāo)服務(wù)的class對(duì)象,即系統(tǒng)類(lèi)對(duì)象,再通過(guò)反射機(jī)制調(diào)用目標(biāo)服務(wù)的系統(tǒng)類(lèi)的newinstance來(lái)調(diào)用構(gòu)造函數(shù)創(chuàng)建目標(biāo)服務(wù);之后通過(guò)反射機(jī)制調(diào)用目標(biāo)服務(wù)的attachbasecontext的函數(shù),最后調(diào)用目標(biāo)服務(wù)的oncreate函數(shù),實(shí)現(xiàn)對(duì)目標(biāo)服務(wù)的初始化。其具體代碼的示例如下:

其中,attachbasecontext函數(shù)的具體代碼的示例如下:

在該函數(shù)中,參數(shù)contextwrapper是目標(biāo)服務(wù),而目標(biāo)服務(wù)的父類(lèi)是系統(tǒng)的contextwrapper類(lèi),參數(shù)context則是之前獲取的插件的context對(duì)象。

圖5是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的裝置的一個(gè)實(shí)施例的結(jié)構(gòu)圖。如圖5所示,該實(shí)施例的裝置包括:接收單元510和執(zhí)行單元520。其中:

接收單元510,用于通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息。

執(zhí)行單元520,用于根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù)。

其中,服務(wù)管理組件管理其所在的進(jìn)程中的所有服務(wù),服務(wù)管理組件與客戶(hù)端運(yùn)行在不同的進(jìn)程中。

具體實(shí)現(xiàn)中,接收單元510可以具體用于根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息調(diào)用服務(wù)管理組件的aidl接口對(duì)象的startservice函數(shù),執(zhí)行單元520可以具體用于通過(guò)服務(wù)管理組件中繼承所述aidl接口的內(nèi)部類(lèi)對(duì)象訪問(wèn)服務(wù)管理組件核心類(lèi)的startservice函數(shù)來(lái)啟動(dòng)目標(biāo)服務(wù),其中服務(wù)管理組件的核心類(lèi)實(shí)現(xiàn)aidl接口。

基于本發(fā)明實(shí)施例提供的啟動(dòng)插件服務(wù)的裝置,通過(guò)為服務(wù)端每個(gè)進(jìn)程設(shè)置服務(wù)管理組件,管理其所在進(jìn)程中的所有服務(wù),當(dāng)通過(guò)服務(wù)管理組件的binder對(duì)象接收到客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息后,根據(jù)此啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù),當(dāng)目標(biāo)服務(wù)與客戶(hù)端運(yùn)行在不同的進(jìn)程中時(shí),可以實(shí)現(xiàn)對(duì)目標(biāo)服務(wù)的啟動(dòng),由于本發(fā)明實(shí)施例是通過(guò)設(shè)置于每一進(jìn)程中的服務(wù)管理組件對(duì)進(jìn)程中的所有服務(wù)進(jìn)行管理,因此其既不需要在主程序的androidmanifest.xml文件中預(yù)設(shè)服務(wù)坑位,也不需要在服務(wù)升級(jí)時(shí)對(duì)主程序進(jìn)行升級(jí)的額外處理,即可實(shí)現(xiàn)對(duì)插件提供的服務(wù)的啟動(dòng)。

圖6是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的裝置的另一個(gè)實(shí)施例的結(jié)構(gòu)圖。如圖6所示,與圖5的實(shí)施例相比,在該實(shí)施例中,啟動(dòng)插件服務(wù)的裝置的執(zhí)行單元620還包括:第一檢測(cè)模塊621、獲取模塊622和創(chuàng)建模塊623。其中:

第一檢測(cè)模塊621,用于根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在服務(wù)管理組件中是否保存有目標(biāo)服務(wù)安裝信息。

獲取模塊622,用于根據(jù)第一檢測(cè)模塊621的檢測(cè)結(jié)果,響應(yīng)于在服務(wù)管理組件中保存有目標(biāo)服務(wù)安裝信息,獲取目標(biāo)服務(wù)安裝信息。

創(chuàng)建模塊623,用于根據(jù)第一檢測(cè)模塊621的檢測(cè)結(jié)果,響應(yīng)于在服務(wù)管理組件中未保存有目標(biāo)服務(wù)安裝信息,創(chuàng)建目標(biāo)服務(wù)安裝信息。

具體實(shí)現(xiàn)中,創(chuàng)建模塊623可以具體用于:首先根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在服務(wù)管理組件中是否保存有提供目標(biāo)服務(wù)的插件,若在服務(wù)管理組件中保存有提供目標(biāo)服務(wù)的插件,則從插件中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象,若在服務(wù)管理組件中未保存有提供目標(biāo)服務(wù)的插件,則從提供目標(biāo)服務(wù)的插件的安裝包中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象,最后基于啟動(dòng)服務(wù)請(qǐng)求信息和所獲得的目標(biāo)服務(wù)的serviceinfo對(duì)象,創(chuàng)建目標(biāo)服務(wù)安裝信息。

進(jìn)一步,如圖6所示,執(zhí)行單元620還包括:安裝模塊624,用于在創(chuàng)建模塊623創(chuàng)建目標(biāo)服務(wù)安裝信息之后,基于目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

具體實(shí)現(xiàn)中,執(zhí)行單元620還可以包括:第一存儲(chǔ)模塊,用于在服務(wù)管理組件中保存目標(biāo)服務(wù)安裝信息,以在下一次啟動(dòng)目標(biāo)服務(wù)時(shí)可以直接從服務(wù)管理組件中獲取目標(biāo)服務(wù)安裝信息。

圖7是本發(fā)明實(shí)施例啟動(dòng)插件服務(wù)的裝置的又一個(gè)實(shí)施例的結(jié)構(gòu)圖。如圖7所示,與圖6的實(shí)施例相比,在該實(shí)施例中,啟動(dòng)插件服務(wù)的裝置的執(zhí)行單元720還包括:第二檢測(cè)模塊725和執(zhí)行模塊726。其中:

第二檢測(cè)模塊725,用于根據(jù)目標(biāo)服務(wù)安裝信息,檢測(cè)在服務(wù)管理組件中是否保存有目標(biāo)服務(wù)。

執(zhí)行模塊726,用于根據(jù)第二檢測(cè)模塊725的檢測(cè)結(jié)果,響應(yīng)于在服務(wù)管理組件中保存有目標(biāo)服務(wù),調(diào)用目標(biāo)服務(wù)的onstartcommand函數(shù)。

安裝模塊724,還用于根據(jù)第二檢測(cè)模塊725的檢測(cè)結(jié)果,響應(yīng)于在服務(wù)管理組件中未保存有目標(biāo)服務(wù),基于目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

具體實(shí)現(xiàn)中,安裝模塊724可以具體用于:獲取提供目標(biāo)服務(wù)的插件的context對(duì)象,基于目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù),以及初始化所述目標(biāo)服務(wù)。

具體地,安裝模塊724基于目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù),具體用于:從提供目標(biāo)服務(wù)的插件的context對(duì)象獲取插件的類(lèi)加載器,從目標(biāo)服務(wù)安裝信息獲取目標(biāo)服務(wù)的全類(lèi)名,基于目標(biāo)服務(wù)的全類(lèi)名,通過(guò)反射機(jī)制利用插件的類(lèi)加載器獲取目標(biāo)服務(wù)的系統(tǒng)類(lèi)對(duì)象,通過(guò)反射機(jī)制調(diào)用目標(biāo)服務(wù)的系統(tǒng)類(lèi)的newinstance來(lái)調(diào)用構(gòu)造函數(shù)創(chuàng)建目標(biāo)服務(wù)。

具體地,安裝模塊724初始化目標(biāo)服務(wù),具體用于:通過(guò)反射機(jī)制調(diào)用目標(biāo)服務(wù)的attachbasecontext的函數(shù),以及調(diào)用目標(biāo)服務(wù)的oncreate函數(shù)。

進(jìn)一步,執(zhí)行單元720還包括:第二存儲(chǔ)模塊,用于在服務(wù)管理組件中保存目標(biāo)服務(wù),以在下一次啟動(dòng)目標(biāo)服務(wù)時(shí)可以直接從服務(wù)管理組件中獲取目標(biāo)服務(wù)。

具體地,在安裝模塊724初始化目標(biāo)服務(wù)之后,第二存儲(chǔ)模塊用于保存初始化后的目標(biāo)服務(wù),以在下一次啟動(dòng)目標(biāo)服務(wù)時(shí)能夠直接從服務(wù)管理組件中獲取初始化后的目標(biāo)服務(wù)。

進(jìn)一步,執(zhí)行模塊726,還用于在安裝模塊724基于目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)之后,調(diào)用目標(biāo)服務(wù)的onstartcommand函數(shù)。

另外,本發(fā)明實(shí)施例還提供了終端設(shè)備,如圖8所示,為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分,具體技術(shù)細(xì)節(jié)未揭示的,請(qǐng)參照本發(fā)明實(shí)施例方法部分。該終端設(shè)備可以為包括手機(jī)、平板電腦、pda(personaldigitalassistant,個(gè)人數(shù)字助理)、pos(pointofsales,銷(xiāo)售終端)、車(chē)載電腦等任意終端設(shè)備,以終端設(shè)備為手機(jī)為例:

圖8是與本發(fā)明實(shí)施例提供的終端設(shè)備相關(guān)的手機(jī)的部分結(jié)構(gòu)的框圖。參考圖8,手機(jī)包括:射頻(radiofrequency,rf)電路810、存儲(chǔ)器820、輸入單元830、顯示單元840、傳感器850、音頻電路860、無(wú)線(xiàn)保真(wireless-fidelity,wi-fi)模塊870、處理器880、以及電源890等部件。本領(lǐng)域技術(shù)人員可以理解,圖8中示出的手機(jī)結(jié)構(gòu)并不構(gòu)成對(duì)手機(jī)的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。

下面結(jié)合圖8對(duì)手機(jī)的各個(gè)構(gòu)成部件進(jìn)行具體的介紹:

rf電路810可用于收發(fā)信息或通話(huà)過(guò)程中,信號(hào)的接收和發(fā)送,特別地,將基站的下行信息接收后,給處理器880處理;另外,將設(shè)計(jì)上行的數(shù)據(jù)發(fā)送給基站。通常,rf電路810包括但不限于天線(xiàn)、至少一個(gè)放大器、收發(fā)信機(jī)、耦合器、低噪聲放大器(lownoiseamplifier,lna)、雙工器等。此外,rf電路810還可以通過(guò)無(wú)線(xiàn)通信與網(wǎng)絡(luò)和其他設(shè)備通信。上述無(wú)線(xiàn)通信可以使用任一通信標(biāo)準(zhǔn)或協(xié)議,包括但不限于全球移動(dòng)通訊系統(tǒng)(globalsystemofmobilecommunication,gsm)、通用分組無(wú)線(xiàn)服務(wù)(generalpacketradioservice,gprs)、碼分多址(codedivisionmultipleaccess,cdma)、寬帶碼分多址(widebandcodedivisionmultipleaccess,wcdma)、長(zhǎng)期演進(jìn)(longtermevolution,lte)、電子郵件、短消息服務(wù)(shortmessagingservice,sms)等。

存儲(chǔ)器820可用于存儲(chǔ)軟件程序以及模塊,處理器880通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器820的軟件程序以及模塊,從而執(zhí)行手機(jī)的各種功能應(yīng)用以及數(shù)據(jù)處理。存儲(chǔ)器820可主要包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存儲(chǔ)程序區(qū)可存儲(chǔ)操作系統(tǒng)、至少一個(gè)功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)手機(jī)的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話(huà)本等)等。此外,存儲(chǔ)器820可以包括高速隨機(jī)存取存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,例如至少一個(gè)磁盤(pán)存儲(chǔ)器件、閃存器件、或其他易失性固態(tài)存儲(chǔ)器件。

輸入單元830可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與手機(jī)的用戶(hù)設(shè)置以及功能控制有關(guān)的鍵信號(hào)輸入。具體地,輸入單元830可包括觸控面板831以及其他輸入設(shè)備832。觸控面板831,也稱(chēng)為觸摸屏,可收集用戶(hù)在其上或附近的觸摸操作(比如用戶(hù)使用手指、觸筆等任何適合的物體或附件在觸控面板831上或在觸控面板831附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動(dòng)相應(yīng)的連接裝置??蛇x的,觸控面板831可包括觸摸檢測(cè)裝置和觸摸控制器兩個(gè)部分。其中,觸摸檢測(cè)裝置檢測(cè)用戶(hù)的觸摸方位,并檢測(cè)觸摸操作帶來(lái)的信號(hào),將信號(hào)傳送給觸摸控制器;觸摸控制器從觸摸檢測(cè)裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點(diǎn)坐標(biāo),再送給處理器880,并能接收處理器880發(fā)來(lái)的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線(xiàn)以及表面聲波等多種類(lèi)型實(shí)現(xiàn)觸控面板831。除了觸控面板831,輸入單元830還可以包括其他輸入設(shè)備832。具體地,其他輸入設(shè)備832可以包括但不限于物理鍵盤(pán)、功能鍵(比如音量控制按鍵、開(kāi)關(guān)按鍵等)、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。

顯示單元840可用于顯示由用戶(hù)輸入的信息或提供給用戶(hù)的信息以及手機(jī)的各種菜單。顯示單元840可包括顯示面板841,可選的,可以采用液晶顯示器(liquidcrystaldisplay,lcd)、有機(jī)發(fā)光二極管(organiclight-emittingdiode,oled)等形式來(lái)配置顯示面板841。進(jìn)一步的,觸控面板831可覆蓋顯示面板841,當(dāng)觸控面板831檢測(cè)到在其上或附近的觸摸操作后,傳送給處理器880以確定觸摸事件的類(lèi)型,隨后處理器880根據(jù)觸摸事件的類(lèi)型在顯示面板841上提供相應(yīng)的視覺(jué)輸出。雖然在圖8中,觸控面板831與顯示面板841是作為兩個(gè)獨(dú)立的部件來(lái)實(shí)現(xiàn)手機(jī)的輸入和輸入功能,但是在某些實(shí)施例中,可以將觸控面板831與顯示面板841集成而實(shí)現(xiàn)手機(jī)的輸入和輸出功能。

手機(jī)還可包括至少一種傳感器850,比如光傳感器、運(yùn)動(dòng)傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線(xiàn)的明暗來(lái)調(diào)節(jié)顯示面板841的亮度,接近傳感器可在手機(jī)移動(dòng)到耳邊時(shí),關(guān)閉顯示面板841和/或背光。作為運(yùn)動(dòng)傳感器的一種,加速計(jì)傳感器可檢測(cè)各個(gè)方向上(一般為三軸)加速度的大小,靜止時(shí)可檢測(cè)出重力的大小及方向,可用于識(shí)別手機(jī)姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計(jì)姿態(tài)校準(zhǔn))、振動(dòng)識(shí)別相關(guān)功能(比如計(jì)步器、敲擊)等;至于手機(jī)還可配置的陀螺儀、氣壓計(jì)、濕度計(jì)、溫度計(jì)、紅外線(xiàn)傳感器等其他傳感器,在此不再贅述。

音頻電路860、揚(yáng)聲器861,傳聲器862可提供用戶(hù)與手機(jī)之間的音頻接口。音頻電路860可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號(hào),傳輸?shù)綋P(yáng)聲器861,由揚(yáng)聲器861轉(zhuǎn)換為聲音信號(hào)輸出;另一方面,傳聲器862將收集的聲音信號(hào)轉(zhuǎn)換為電信號(hào),由音頻電路860接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器880處理后,經(jīng)rf電路810以發(fā)送給比如另一手機(jī),或者將音頻數(shù)據(jù)輸出至存儲(chǔ)器820以便進(jìn)一步處理。

wifi屬于短距離無(wú)線(xiàn)傳輸技術(shù),手機(jī)通過(guò)wifi模塊870可以幫助用戶(hù)收發(fā)電子郵件、瀏覽網(wǎng)頁(yè)和訪問(wèn)流式媒體等,它為用戶(hù)提供了無(wú)線(xiàn)的寬帶互聯(lián)網(wǎng)訪問(wèn)。雖然圖8示出了wifi模塊870,但是可以理解的是,其并不屬于手機(jī)的必須構(gòu)成,完全可以根據(jù)需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。

處理器880是手機(jī)的控制中心,利用各種接口和線(xiàn)路連接整個(gè)手機(jī)的各個(gè)部分,通過(guò)運(yùn)行或執(zhí)行存儲(chǔ)在存儲(chǔ)器820內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲(chǔ)在存儲(chǔ)器820內(nèi)的數(shù)據(jù),執(zhí)行手機(jī)的各種功能和處理數(shù)據(jù),從而對(duì)手機(jī)進(jìn)行整體監(jiān)控。可選的,處理器880可包括一個(gè)或多個(gè)處理單元;優(yōu)選的,處理器880可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶(hù)界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無(wú)線(xiàn)通信。可以理解的是,上述調(diào)制解調(diào)處理器也可以不集成到處理器880中。

手機(jī)還包括給各個(gè)部件供電的電源890(比如電池),優(yōu)選的,電源可以通過(guò)電源管理系統(tǒng)與處理器880邏輯相連,從而通過(guò)電源管理系統(tǒng)實(shí)現(xiàn)管理充電、放電、以及功耗管理等功能。

盡管未示出,手機(jī)還可以包括攝像頭、藍(lán)牙模塊等,在此不再贅述。

在本發(fā)明實(shí)施例中,該終端設(shè)備所包括的處理器880還具有以下功能:

通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息;

根據(jù)啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù);

其中,服務(wù)管理組件管理其所在的進(jìn)程中的所有服務(wù),服務(wù)管理組件與客戶(hù)端運(yùn)行在不同的進(jìn)程中。

本發(fā)明實(shí)施例提供了以下技術(shù)方案:

1、一種啟動(dòng)插件服務(wù)的方法,包括:

通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息;

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)所述服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù);

其中,所述服務(wù)管理組件管理其所在的進(jìn)程中的所有服務(wù),所述服務(wù)管理組件與所述客戶(hù)端運(yùn)行在不同的進(jìn)程中。

2、根據(jù)1所述的方法,所述通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息,包括:

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息調(diào)用所述服務(wù)管理組件的aidl接口對(duì)象的startservice函數(shù)。

3、根據(jù)2所述的方法,所述根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)所述服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù),包括:

通過(guò)所述服務(wù)管理組件中繼承所述aidl接口的內(nèi)部類(lèi)對(duì)象訪問(wèn)所述服務(wù)管理組件核心類(lèi)的startservice函數(shù);其中所述服務(wù)管理組件的核心類(lèi)實(shí)現(xiàn)所述aidl接口。

4、根據(jù)1至3任意一項(xiàng)所述的方法,所述根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)所述服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù),包括:

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在所述服務(wù)管理組件中是否保存有目標(biāo)服務(wù)安裝信息;

若在所述服務(wù)管理組件中保存有目標(biāo)服務(wù)安裝信息,獲取所述目標(biāo)服務(wù)安裝信息;

若在所述服務(wù)管理組件中未保存有目標(biāo)服務(wù)安裝信息,創(chuàng)建目標(biāo)服務(wù)安裝信息。

5、根據(jù)4所述的方法,所述創(chuàng)建目標(biāo)服務(wù)安裝信息,包括:

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在所述服務(wù)管理組件中是否保存有提供目標(biāo)服務(wù)的插件;

若在所述服務(wù)管理組件中保存有提供目標(biāo)服務(wù)的插件,從所述插件中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象;

若在所述服務(wù)管理組件中未保存有提供目標(biāo)服務(wù)的插件,從提供目標(biāo)服務(wù)的插件的安裝包中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象;

基于所述啟動(dòng)服務(wù)請(qǐng)求信息和所述目標(biāo)服務(wù)的serviceinfo對(duì)象,創(chuàng)建目標(biāo)服務(wù)安裝信息。

6、根據(jù)4或5所述的方法,所述創(chuàng)建目標(biāo)服務(wù)安裝信息之后,還包括:

在所述服務(wù)管理組件中保存所述目標(biāo)服務(wù)安裝信息。

7、根據(jù)4至6任意一項(xiàng)所述的方法,所述創(chuàng)建目標(biāo)服務(wù)安裝信息之后,還包括:

基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

8、根據(jù)7所述的方法,所述獲取所述目標(biāo)服務(wù)安裝信息之后,還包括:

根據(jù)所述目標(biāo)服務(wù)安裝信息,檢測(cè)在所述服務(wù)管理組件中是否保存有目標(biāo)服務(wù);

若在所述服務(wù)管理組件中保存有目標(biāo)服務(wù),調(diào)用所述目標(biāo)服務(wù)的onstartcommand函數(shù);

若在所述服務(wù)管理組件中未保存有目標(biāo)服務(wù),基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

9、根據(jù)7或8所述的方法,所述基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù),包括:

獲取提供目標(biāo)服務(wù)的插件的context對(duì)象;

基于所述目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù);

初始化所述目標(biāo)服務(wù)。

10、根據(jù)9所述的方法,所述基于所述目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù),包括:

從提供目標(biāo)服務(wù)的插件的context對(duì)象獲取所述插件的類(lèi)加載器;

從所述目標(biāo)服務(wù)安裝信息獲取目標(biāo)服務(wù)的全類(lèi)名;

基于所述目標(biāo)服務(wù)的全類(lèi)名,通過(guò)反射機(jī)制利用所述插件的類(lèi)加載器獲取所述目標(biāo)服務(wù)的系統(tǒng)類(lèi)對(duì)象;

通過(guò)反射機(jī)制調(diào)用所述目標(biāo)服務(wù)的系統(tǒng)類(lèi)的newinstance來(lái)調(diào)用構(gòu)造函數(shù)創(chuàng)建目標(biāo)服務(wù)。

11、根據(jù)9所述的方法,所述初始化所述目標(biāo)服務(wù),包括:

通過(guò)反射機(jī)制調(diào)用所述目標(biāo)服務(wù)的attachbasecontext的函數(shù);

調(diào)用所述目標(biāo)服務(wù)的oncreate函數(shù)。

12、根據(jù)8至11任意一項(xiàng)所述的方法,所述基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)之后,還包括:

在所述服務(wù)管理組件中保存所述目標(biāo)服務(wù)。

13、根據(jù)8至12任意一項(xiàng)所述的方法,所述基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)之后,還包括:

調(diào)用所述目標(biāo)服務(wù)的onstartcommand函數(shù)。

14、一種啟動(dòng)插件服務(wù)的裝置,包括:

接收單元,用于通過(guò)服務(wù)管理組件的binder對(duì)象接收客戶(hù)端的啟動(dòng)服務(wù)請(qǐng)求信息;

執(zhí)行單元,用于根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息啟動(dòng)所述服務(wù)管理組件所在的進(jìn)程中的目標(biāo)服務(wù);

其中,所述服務(wù)管理組件管理其所在的進(jìn)程中的所有服務(wù),所述服務(wù)管理組件與所述客戶(hù)端運(yùn)行在不同的進(jìn)程中。

15、根據(jù)14所述的裝置,所述接收單元,具體用于根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息調(diào)用所述服務(wù)管理組件的aidl接口對(duì)象的startservice函數(shù)。

16、根據(jù)15所述的裝置,所述執(zhí)行單元,具體用于通過(guò)所述服務(wù)管理組件中繼承所述aidl接口的內(nèi)部類(lèi)對(duì)象訪問(wèn)所述服務(wù)管理組件核心類(lèi)的startservice函數(shù);其中,所述服務(wù)管理組件的核心類(lèi)實(shí)現(xiàn)所述aidl接口。

17、根據(jù)16所述的裝置,所述執(zhí)行單元,包括:

第一檢測(cè)模塊,用于根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在所述服務(wù)管理組件中是否保存有目標(biāo)服務(wù)安裝信息;

獲取模塊,用于根據(jù)所述第一檢測(cè)模塊的檢測(cè)結(jié)果,響應(yīng)于在所述服務(wù)管理組件中保存有目標(biāo)服務(wù)安裝信息,獲取所述目標(biāo)服務(wù)安裝信息;

創(chuàng)建模塊,用于根據(jù)所述第一檢測(cè)模塊的檢測(cè)結(jié)果,響應(yīng)于在所述服務(wù)管理組件中未保存有目標(biāo)服務(wù)安裝信息,創(chuàng)建目標(biāo)服務(wù)安裝信息。

18、根據(jù)17所述的裝置,所述創(chuàng)建模塊,具體用于:

根據(jù)所述啟動(dòng)服務(wù)請(qǐng)求信息,檢測(cè)在所述服務(wù)管理組件中是否保存有提供目標(biāo)服務(wù)的插件;

若在所述服務(wù)管理組件中保存有提供目標(biāo)服務(wù)的插件,從所述插件中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象;

若在所述服務(wù)管理組件中未保存有提供目標(biāo)服務(wù)的插件,從提供目標(biāo)服務(wù)的插件的安裝包中獲取目標(biāo)服務(wù)的serviceinfo對(duì)象;

基于所述啟動(dòng)服務(wù)請(qǐng)求信息和所述目標(biāo)服務(wù)的serviceinfo對(duì)象,創(chuàng)建目標(biāo)服務(wù)安裝信息。

19、根據(jù)17或18所述的裝置,所述執(zhí)行單元,還包括:

第一存儲(chǔ)模塊,用于在所述服務(wù)管理組件中保存所述目標(biāo)服務(wù)安裝信息。

20、根據(jù)17至19任意一項(xiàng)所述的裝置,所述執(zhí)行單元,還包括:

安裝模塊,用于在所述創(chuàng)建模塊創(chuàng)建目標(biāo)服務(wù)安裝信息之后,基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

21、根據(jù)20所述的裝置,所述執(zhí)行單元,還包括:

第二檢測(cè)模塊,用于根據(jù)所述目標(biāo)服務(wù)安裝信息,檢測(cè)在所述服務(wù)管理組件中是否保存有目標(biāo)服務(wù);

執(zhí)行模塊,用于根據(jù)所述第二檢測(cè)模塊的檢測(cè)結(jié)果,響應(yīng)于在所述服務(wù)管理組件中保存有目標(biāo)服務(wù),調(diào)用所述目標(biāo)服務(wù)的onstartcommand函數(shù);

所述安裝模塊,還用于根據(jù)所述第二檢測(cè)模塊的檢測(cè)結(jié)果,響應(yīng)于在所述服務(wù)管理組件中未保存有目標(biāo)服務(wù),基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)。

22、根據(jù)20或21所述的裝置,所述安裝模塊,具體用于:

獲取提供目標(biāo)服務(wù)的插件的context對(duì)象;

基于所述目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù);

初始化所述目標(biāo)服務(wù)。

23、根據(jù)22所述的裝置,所述安裝模塊基于所述目標(biāo)服務(wù)安裝信息利用提供目標(biāo)服務(wù)的插件的context對(duì)象創(chuàng)建目標(biāo)服務(wù),具體用于:

從提供目標(biāo)服務(wù)的插件的context對(duì)象獲取所述插件的類(lèi)加載器;

從所述目標(biāo)服務(wù)安裝信息獲取目標(biāo)服務(wù)的全類(lèi)名;

基于所述目標(biāo)服務(wù)的全類(lèi)名,通過(guò)反射機(jī)制利用所述插件的類(lèi)加載器獲取所述目標(biāo)服務(wù)的系統(tǒng)類(lèi)對(duì)象;

通過(guò)反射機(jī)制調(diào)用所述目標(biāo)服務(wù)的系統(tǒng)類(lèi)的newinstance來(lái)調(diào)用構(gòu)造函數(shù)創(chuàng)建目標(biāo)服務(wù)。

24、根據(jù)22所述的裝置,所述安裝模塊初始化所述目標(biāo)服務(wù),具體用于:

通過(guò)反射機(jī)制調(diào)用所述目標(biāo)服務(wù)的attachbasecontext的函數(shù);

調(diào)用所述目標(biāo)服務(wù)的oncreate函數(shù)。

25、根據(jù)21至24任意一項(xiàng)所述的裝置,所述執(zhí)行單元,還包括:

第二存儲(chǔ)模塊,用于在所述服務(wù)管理組件中保存所述目標(biāo)服務(wù)。

26、根據(jù)21至25任意一項(xiàng)所述的裝置,所述執(zhí)行模塊,還用于在所述安裝模塊基于所述目標(biāo)服務(wù)安裝信息安裝目標(biāo)服務(wù)之后,調(diào)用所述目標(biāo)服務(wù)的onstartcommand函數(shù)。

27、一種終端設(shè)備,包括:處理器和存儲(chǔ)器;其中,

所述存儲(chǔ)器用于存儲(chǔ)1至13任意一項(xiàng)所述的啟動(dòng)插件服務(wù)的方法;

所述處理器用于執(zhí)行所述啟動(dòng)插件服務(wù)的方法。

本說(shuō)明書(shū)中各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其它實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同或相似的部分相互參見(jiàn)即可。對(duì)于系統(tǒng)實(shí)施例而言,由于其與方法實(shí)施例基本對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。

可能以許多方式來(lái)實(shí)現(xiàn)本發(fā)明的方法和裝置、設(shè)備。例如,可通過(guò)軟件、硬件、固件或者軟件、硬件、固件的任何組合來(lái)實(shí)現(xiàn)本發(fā)明的方法和裝置、設(shè)備。用于所述方法的步驟的上述順序僅是為了進(jìn)行說(shuō)明,本發(fā)明的方法的步驟不限于以上具體描述的順序,除非以其它方式特別說(shuō)明。此外,在一些實(shí)施例中,還可將本發(fā)明實(shí)施為記錄在記錄介質(zhì)中的程序,這些程序包括用于實(shí)現(xiàn)根據(jù)本發(fā)明的方法的機(jī)器可讀指令。因而,本發(fā)明還覆蓋存儲(chǔ)用于執(zhí)行根據(jù)本發(fā)明的方法的程序的記錄介質(zhì)。

本發(fā)明的描述是為了示例和描述起見(jiàn)而給出的,而并不是無(wú)遺漏的或者將本發(fā)明限于所公開(kāi)的形式。很多修改和變化對(duì)于本領(lǐng)域的普通技術(shù)人員而言是顯然的。選擇和描述實(shí)施例是為了更好說(shuō)明本發(fā)明的原理和實(shí)際應(yīng)用,并且使本領(lǐng)域的普通技術(shù)人員能夠理解本發(fā)明從而設(shè)計(jì)適于特定用途的帶有各種修改的各種實(shí)施例。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
漠河县| 兴隆县| 布拖县| 聊城市| 三亚市| 张北县| 永修县| 东乡族自治县| 黄陵县| 唐河县| 固始县| 喀喇| 漯河市| 治多县| 吉水县| 乳源| 黔南| 泌阳县| 平南县| 桦南县| 涟源市| 永寿县| 易门县| 同德县| 阳朔县| 禄丰县| 谷城县| 时尚| 陕西省| 衡山县| 江华| 武邑县| 内乡县| 比如县| 东乌珠穆沁旗| 龙岩市| 清涧县| 丽水市| 东光县| 常州市| 鹿泉市|