應(yīng)用程序常駐操作系統(tǒng)后臺(tái)的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及應(yīng)用程序通信技術(shù),具體涉及一種應(yīng)用程序常駐操作系統(tǒng)后臺(tái)的方法及裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的普及,用戶對(duì)網(wǎng)絡(luò)通信服務(wù)的依耐性越來(lái)越強(qiáng),對(duì)網(wǎng)絡(luò)通信服務(wù)系統(tǒng)的穩(wěn)定性、響應(yīng)能力以及不間斷(zero-downtime)的服務(wù)特性也有了越來(lái)越高的要求。通信設(shè)備作為承載網(wǎng)絡(luò)通信服務(wù)的載體,通過(guò)安裝操作系統(tǒng),并基于安裝的操作系統(tǒng)安裝應(yīng)用程序(App,Applicat1n),從而為用戶提供便捷的互聯(lián)網(wǎng)服務(wù)。
[0003]以安卓(Android)操作系統(tǒng)為例,Android操作系統(tǒng)是一種應(yīng)用于移動(dòng)通信設(shè)備的操作系統(tǒng),由google提供源碼給各大廠商定制,應(yīng)用程序是安裝在Android上的可執(zhí)行程序。在目前Android操作系統(tǒng)環(huán)境下,一些第三方App由于任務(wù)運(yùn)行的需要,需要常駐在操作系統(tǒng)后臺(tái),例如,對(duì)于即時(shí)通訊類應(yīng)用程序,需要實(shí)時(shí)從服務(wù)器更新最新消息,以保證正常服務(wù)。再例如,對(duì)于電子市場(chǎng)類應(yīng)用程序,需要在后臺(tái)監(jiān)控通信設(shè)備中其他應(yīng)用程序的安裝、卸載情況,以上傳通信設(shè)備中應(yīng)用程序的安裝、卸載數(shù)據(jù),從而對(duì)用戶的喜好行為特征進(jìn)行分析。再例如,對(duì)于定位服務(wù)(LBS, Locat1n Based Services)類應(yīng)用程序,需要監(jiān)控通信設(shè)備的地理位置信息,以實(shí)現(xiàn)運(yùn)營(yíng)商廣告的精確投放。因此,如何實(shí)現(xiàn)第三方App常駐操作系統(tǒng)后臺(tái)成為迫切需要解決的技術(shù)問(wèn)題。
[0004]現(xiàn)有技術(shù)中,由于Android操作系統(tǒng)允許第三方開(kāi)發(fā)者開(kāi)發(fā)的系統(tǒng)級(jí)應(yīng)用程序駐留操作系統(tǒng)后臺(tái)(簡(jiǎn)稱后臺(tái)),因而,通過(guò)獲取通信設(shè)備上操作系統(tǒng)的根(Root)權(quán)限,修改操作系統(tǒng)中/system/build, prop文件的配置信息,可以實(shí)現(xiàn)第三方App在操作系統(tǒng)后臺(tái)常駐,即利用操作系統(tǒng)配置文件的漏洞,從而實(shí)現(xiàn)后臺(tái)常駐,具體流程如下:
[0005]首先,獲取操作系統(tǒng)Root權(quán)限;接著,修改操作系統(tǒng)下的/system/build, prop文件的配置信息,在該build, prop文件的配置信息中加入sys.keep_App_l = xxx.xxx.xxx,其中,xxx.xxx.xxx是第三方App包名;然后,重啟動(dòng)通信設(shè)備后生效,并通過(guò)分叉函數(shù)(fork)構(gòu)建針對(duì)該第三方App的父進(jìn)程以及與父進(jìn)程直接相關(guān)聯(lián)的子進(jìn)程。這樣,由于在操作系統(tǒng)下的/system/build, prop文件的配置信息加入了第三方App相關(guān)信息,使得操作系統(tǒng)可以對(duì)該第三方App構(gòu)建的父進(jìn)程以及子進(jìn)程進(jìn)行管理和控制,在第三方App退出操作系統(tǒng)后,第三方App對(duì)應(yīng)的父進(jìn)程和子進(jìn)程仍可駐留于后臺(tái),從而實(shí)現(xiàn)第三方App常駐操作系統(tǒng)后臺(tái)。
[0006]但上述應(yīng)用程序常駐操作系統(tǒng)后臺(tái)的方法,首先,需要通信設(shè)備具有Root功能,但據(jù)不完全統(tǒng)計(jì),目前Root的比率大致為20%,應(yīng)用受到限制,適用性不廣;其次,Android操作系統(tǒng)設(shè)置有任務(wù)管理器,用于記錄應(yīng)用程序?qū)?yīng)的父進(jìn)程以及與父進(jìn)程直接相關(guān)聯(lián)的子進(jìn)程占用的內(nèi)存資源等信息,由于基于Android操作系統(tǒng)中的進(jìn)程是托管給操作系統(tǒng)的,因而,在操作系統(tǒng)后臺(tái)運(yùn)行的應(yīng)用程序較多、占用大量?jī)?nèi)存資源導(dǎo)致操作系統(tǒng)內(nèi)存資源不足,需要進(jìn)行系統(tǒng)清理的情況下,由于通過(guò)獲取操作系統(tǒng)Root權(quán)限構(gòu)建的第三方App對(duì)應(yīng)的父進(jìn)程以及子進(jìn)程由操作系統(tǒng)進(jìn)行管理和控制,通過(guò)查詢?nèi)蝿?wù)管理器,依據(jù)預(yù)先設(shè)置的規(guī)則,例如,按照內(nèi)存資源占用量或應(yīng)用程序優(yōu)先級(jí)關(guān)閉(kill) 一些應(yīng)用程序?qū)?yīng)的父進(jìn)程以及與父進(jìn)程直接相關(guān)聯(lián)的子進(jìn)程,從而終止該運(yùn)用程序的運(yùn)行,并能回收該運(yùn)用程序占用的內(nèi)存資源以保證操作系統(tǒng)的正常運(yùn)行,導(dǎo)致駐留于后臺(tái)的第三方App對(duì)應(yīng)的父進(jìn)程以及關(guān)聯(lián)的子進(jìn)程可能被操作系統(tǒng)清除掉以釋放內(nèi)存資源;或者,通信設(shè)備中安裝的殺毒軟件進(jìn)行查殺毒的過(guò)程中,第三方App對(duì)應(yīng)的父進(jìn)程以及與父進(jìn)程直接相關(guān)聯(lián)的子進(jìn)程也可能會(huì)被清除掉。在第三方App被清除掉的情況下,只有通過(guò)重新啟動(dòng)通信設(shè)備,并運(yùn)行該第三方App,才能重新將第三方App置于后臺(tái)運(yùn)行方式。
[0007]由上述可見(jiàn),現(xiàn)有應(yīng)用程序常駐操作系統(tǒng)后臺(tái)的方法,由于駐留于后臺(tái)的應(yīng)用程序在操作系統(tǒng)內(nèi)存資源不足時(shí)或在查殺毒的過(guò)程中被清除掉,不能實(shí)現(xiàn)第三方App常駐(例如24小時(shí))操作系統(tǒng)后臺(tái),使得應(yīng)用程序常駐后臺(tái)的可靠性較低,從而給用戶的正常通信業(yè)務(wù)帶來(lái)不便,并影響用戶通信業(yè)務(wù)的正常進(jìn)行,降低了用戶的通信業(yè)務(wù)體驗(yàn)。而通過(guò)通信設(shè)備的重啟動(dòng)加載應(yīng)用程序以重新啟動(dòng)被關(guān)掉的進(jìn)程駐留后臺(tái),不僅操作流程較為繁瑣,實(shí)現(xiàn)應(yīng)用程序駐留后臺(tái)所需時(shí)間較長(zhǎng),更會(huì)導(dǎo)致整個(gè)通信設(shè)備通信的中斷,對(duì)用戶的通信業(yè)務(wù)體驗(yàn)影響更大。
【發(fā)明內(nèi)容】
[0008]鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的應(yīng)用程序常駐操作系統(tǒng)后臺(tái)的方法及裝置。
[0009]依據(jù)本發(fā)明的一個(gè)方面,提供了應(yīng)用程序常駐操作系統(tǒng)后臺(tái)的方法,該方法包括:
[0010]接收目標(biāo)應(yīng)用程序啟動(dòng)請(qǐng)求,為該目標(biāo)應(yīng)用程序啟動(dòng)請(qǐng)求對(duì)應(yīng)的目標(biāo)應(yīng)用程序創(chuàng)建主進(jìn)程;
[0011]所述主進(jìn)程調(diào)用函數(shù)創(chuàng)建宿主?;钸M(jìn)程;
[0012]宿主?;钸M(jìn)程調(diào)用函數(shù)創(chuàng)建保活進(jìn)程,并在?;钸M(jìn)程創(chuàng)建后,將所述?;钸M(jìn)程托管給操作系統(tǒng);
[0013]構(gòu)建主進(jìn)程與?;钸M(jìn)程連接,觸發(fā)所述主進(jìn)程與?;钸M(jìn)程基于構(gòu)建的連接進(jìn)行相互監(jiān)聽(tīng);
[0014]在監(jiān)聽(tīng)到主進(jìn)程或?;钸M(jìn)程被關(guān)閉后,啟動(dòng)被關(guān)閉的進(jìn)程。
[0015]優(yōu)選地,所述操作系統(tǒng)包括但不限于安卓操作系統(tǒng)、Linux操作系統(tǒng)、塞班操作系統(tǒng)。
[0016]優(yōu)選地,所述目標(biāo)應(yīng)用程序存儲(chǔ)在預(yù)先設(shè)置的啟動(dòng)列表中,在通信設(shè)備每次啟動(dòng)后,自動(dòng)觸發(fā)向操作系統(tǒng)發(fā)起目標(biāo)應(yīng)用程序啟動(dòng)請(qǐng)求,操作系統(tǒng)根據(jù)接收的目標(biāo)應(yīng)用程序啟動(dòng)請(qǐng)求,獲取預(yù)先設(shè)置的啟動(dòng)列表,自動(dòng)加載啟動(dòng)列表中的應(yīng)用程序,并為啟動(dòng)列表中的各應(yīng)用程序分配相應(yīng)的主進(jìn)程。
[0017]優(yōu)選地,所述宿主?;钸M(jìn)程將自身置于關(guān)閉狀態(tài),以使所述?;钸M(jìn)程托管給操作系統(tǒng)。
[0018]優(yōu)選地,所述將自身置于關(guān)閉狀態(tài)包括:
[0019]主進(jìn)程在創(chuàng)建宿主保活進(jìn)程時(shí),為創(chuàng)建的所述宿主?;钸M(jìn)程設(shè)置生命周期,在設(shè)置的生命周期結(jié)束后,所述宿主?;钸M(jìn)程自然關(guān)閉。
[0020]優(yōu)選地,所述將自身置于關(guān)閉狀態(tài)包括:
[0021]宿主保活進(jìn)程在接收到?;钸M(jìn)程創(chuàng)建成功信息后,將自身的生命周期置零。
[0022]優(yōu)選地,所述構(gòu)建主進(jìn)程與保活進(jìn)程連接包括:
[0023]主進(jìn)程創(chuàng)建服務(wù)端套接字,保活進(jìn)程創(chuàng)建客戶端套接字;
[0024]綁定服務(wù)端套接字地址,并通過(guò)服務(wù)端套接字監(jiān)聽(tīng)客戶端套接字;
[0025]等待客戶端套接字連接;
[0026]客戶端套接字與服務(wù)端套接字建立套接字連接。
[0027]優(yōu)選地,所述客戶端套接字與服務(wù)端套接字建立套接字連接包括:
[0028]主進(jìn)程通過(guò)服務(wù)端套接字創(chuàng)建保活進(jìn)程宿主對(duì)象,并為所述?;钸M(jìn)程宿主對(duì)象分配對(duì)應(yīng)的?;钸M(jìn)程標(biāo)識(shí);
[0029]主進(jìn)程使用創(chuàng)建的?;钸M(jìn)程宿主對(duì)象啟動(dòng)?;钸M(jìn)程,并向所述保活進(jìn)程發(fā)送復(fù)活指令,所述復(fù)活指令攜帶所述保活進(jìn)程標(biāo)識(shí)、主進(jìn)程通信接口句柄;
[0030]?;钸M(jìn)程啟動(dòng)并接收來(lái)自主進(jìn)程的復(fù)活指令;
[0031]所述?;钸M(jìn)程通過(guò)客戶端套接字創(chuàng)建對(duì)應(yīng)的?;钸M(jìn)程對(duì)象,并初始化所述保活進(jìn)程對(duì)象;
[0032]所述?;钸M(jìn)程對(duì)象向所述主進(jìn)程發(fā)送啟動(dòng)應(yīng)答消息,所述啟動(dòng)應(yīng)答消息攜帶所述?;钸M(jìn)程對(duì)象對(duì)應(yīng)的?;钸M(jìn)程通信接口句柄、?;钸M(jìn)程標(biāo)識(shí);
[0033]主進(jìn)程收到?;钸M(jìn)程的啟動(dòng)應(yīng)答消息后,根據(jù)所述啟動(dòng)應(yīng)答消息中的?;钸M(jìn)程標(biāo)識(shí)確定對(duì)應(yīng)的保活進(jìn)程宿主對(duì)象,并為所述?;钸M(jìn)程宿主對(duì)象設(shè)置對(duì)應(yīng)的?;钸M(jìn)程通信接口句柄。
[0034]優(yōu)選地,所述在建立套接字連接后,所述方法進(jìn)一步包括:
[0035]所述主進(jìn)程通過(guò)主進(jìn)程通信接口句柄接收來(lái)自?;钸M(jìn)程的數(shù)據(jù),并通過(guò)?;钸M(jìn)程宿主對(duì)象的?;钸M(jìn)程通信接口句柄向?qū)?yīng)的保活進(jìn)程發(fā)送數(shù)據(jù);
[0036]所述保活進(jìn)程通過(guò)?;钸M(jìn)程通信接口句柄接收來(lái)自主進(jìn)程的數(shù)據(jù),并通過(guò)主進(jìn)程通信接口句柄向主進(jìn)程發(fā)送數(shù)據(jù)。
[0037]優(yōu)選地,所述監(jiān)聽(tīng)到主進(jìn)程或保活進(jìn)程被關(guān)閉包括:
[0038]第一進(jìn)程被關(guān)閉,處于關(guān)閉狀態(tài);
[0039]第一進(jìn)程端對(duì)應(yīng)的監(jiān)聽(tīng)組件獲取該第一進(jìn)程處于關(guān)閉狀態(tài),將第一進(jìn)程的狀態(tài)參數(shù)標(biāo)識(shí)設(shè)置為O ;
[0040]通過(guò)套接字連接的第二進(jìn)程讀取第一進(jìn)程的狀態(tài)參數(shù)標(biāo)識(shí);
[0041]第二進(jìn)程確定第一進(jìn)程的狀態(tài)參數(shù)標(biāo)識(shí)為0,確定對(duì)方進(jìn)程被關(guān)閉。
[0042]優(yōu)選地,所述監(jiān)聽(tīng)到主進(jìn)程或?;钸M(jìn)程被關(guān)閉包括:
[0043]主進(jìn)程和?;钸M(jìn)程使用套接字連接互相監(jiān)聽(tīng),確定虛擬套接字連接斷開(kāi),確定主進(jìn)程或保活進(jìn)程被關(guān)閉。
[0044]優(yōu)選地,所述在監(jiān)聽(tīng)到主進(jìn)程或?;钸M(jìn)程被關(guān)閉后,啟動(dòng)被關(guān)閉的進(jìn)程包括:
[0045]主進(jìn)程監(jiān)聽(tīng)到?;钸M(jìn)程被關(guān)閉,調(diào)用復(fù)活指令啟動(dòng)?;钸M(jìn)程。
[0046]優(yōu)選地,所述在監(jiān)聽(tīng)到主進(jìn)程或?;钸M(jìn)程被關(guān)閉后,啟動(dòng)被關(guān)閉的進(jìn)程包括:
[0047]保活進(jìn)程監(jiān)聽(tīng)到主進(jìn)程被關(guān)閉,調(diào)用復(fù)活指令啟動(dòng)主進(jìn)程并觸發(fā)啟動(dòng)的主進(jìn)程執(zhí)行所述調(diào)用函數(shù)創(chuàng)建宿主?;钸M(jìn)程的流程,并在主進(jìn)程啟動(dòng)成功后將自身置于關(guān)閉狀態(tài)。
[0048]優(yōu)選地,所述?;钸M(jìn)程在非安卓生命周期內(nèi)啟動(dòng)主進(jìn)程,并使用am指令在Iinux-C進(jìn)程啟動(dòng)主進(jìn)程。
[0049]優(yōu)選地,所述函數(shù)為分叉函數(shù)。
[0050]優(yōu)選地,所述主進(jìn)程與所述宿主?;钸M(jìn)程為父子進(jìn)程關(guān)系,所述宿主?;钸M(jìn)程與所述?;钸M(jìn)程為父子進(jìn)程關(guān)系。
[0051]優(yōu)選地,通過(guò)未被關(guān)閉的所述保活進(jìn)程或所述主進(jìn)程啟動(dòng)所述被關(guān)閉的進(jìn)程。
[0052]根據(jù)本發(fā)明的另一個(gè)方面提供了一種應(yīng)用程序常駐操作系統(tǒng)后臺(tái)的裝置,該裝置包括:主進(jìn)程創(chuàng)建模塊、宿主?;钸M(jìn)程創(chuàng)建模塊、保活進(jìn)程創(chuàng)建模塊、連接模塊以及監(jiān)聽(tīng)處理模塊,其中,
[0053]主進(jìn)程創(chuàng)建模塊,用于接收目標(biāo)應(yīng)用程序啟動(dòng)請(qǐng)求,為該目標(biāo)應(yīng)用程序啟動(dòng)請(qǐng)求對(duì)應(yīng)的目標(biāo)應(yīng)用程序創(chuàng)建主進(jìn)程;
[0054]宿主保活進(jìn)程創(chuàng)建模塊,用于觸發(fā)主進(jìn)程調(diào)用函數(shù)創(chuàng)建宿主保活