本申請(qǐng)涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及直播應(yīng)用程序的管理方法及裝置。
背景技術(shù):
網(wǎng)絡(luò)直播技術(shù)是一種服務(wù)端將主播用戶的直播視頻數(shù)據(jù)廣播至多個(gè)觀眾用戶進(jìn)行觀看的互聯(lián)網(wǎng)技術(shù)。越來(lái)越多的用戶選擇在移動(dòng)終端在安裝直播服務(wù)商提供的直播應(yīng)用程序,通過(guò)直播應(yīng)用程序參與直播活動(dòng)。
在直播應(yīng)用程序件中,通常會(huì)涉及多種不同的業(yè)務(wù)功能,例如直播間里有秀場(chǎng)、現(xiàn)場(chǎng)、玩唱會(huì)或電競(jìng)等業(yè)務(wù)功能,或者當(dāng)直播間有重要活動(dòng)(如年度盛典、情人節(jié)活動(dòng)、新年活動(dòng)、圣誕活動(dòng)等)時(shí),也需要開發(fā)新的業(yè)務(wù)功能。相關(guān)技術(shù)中,當(dāng)有業(yè)務(wù)功能更新時(shí),通常是由直播服務(wù)端發(fā)布新版本的應(yīng)用程序,由用戶在終端中下載安裝新的應(yīng)用程序。此種方式,一方面操作比較繁瑣;另一方面,無(wú)法保證所有用戶都會(huì)進(jìn)行應(yīng)用程序更新,使得新的業(yè)務(wù)功能無(wú)法推廣。
技術(shù)實(shí)現(xiàn)要素:
為克服相關(guān)技術(shù)中存在的問(wèn)題,本申請(qǐng)?zhí)峁┝酥辈?yīng)用程序的管理方法及裝置。
根據(jù)本申請(qǐng)實(shí)施例的第一方面,提供一種直播應(yīng)用程序的管理方法,所述方法包括:
接收直播服務(wù)端所發(fā)送的直播業(yè)務(wù)更新指令;
在直播業(yè)務(wù)更新指令的指示下,從直播服務(wù)端獲取直播業(yè)務(wù)插件對(duì)應(yīng)的數(shù)據(jù)包,所述數(shù)據(jù)包預(yù)先開發(fā),并獨(dú)立于其他直播業(yè)務(wù)插件對(duì)應(yīng)的數(shù)據(jù)包;
動(dòng)態(tài)加載所獲取的數(shù)據(jù)包,將對(duì)應(yīng)的所述直播業(yè)務(wù)插件添加至應(yīng)用程序中,通過(guò)所述直播業(yè)務(wù)插件更新應(yīng)用程序的直播業(yè)務(wù)功能。
可選的,所述數(shù)據(jù)包中包括資源,在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包時(shí),通過(guò)如下方式加載所述資源:
通過(guò)反射機(jī)制調(diào)用操作系統(tǒng)的資源管理器的成員函數(shù),將所述資源的路徑提供給所述成員函數(shù),并利用所述成員函數(shù)為所述資源創(chuàng)建資源對(duì)象,完成所述資源的動(dòng)態(tài)加載。
可選的,所述數(shù)據(jù)包中包括類文件,在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包時(shí),通過(guò)如下方式加載所述類文件:
通過(guò)操作系統(tǒng)的類加載器加載所述類文件,并執(zhí)行所述類文件,完成所述類文件的動(dòng)態(tài)加載。
可選的,所述方法還包括:
在所述直播業(yè)務(wù)插件運(yùn)行時(shí),通過(guò)如下方式進(jìn)行插件項(xiàng)目的生命周期的回調(diào):
通過(guò)應(yīng)用程序的主項(xiàng)目代理執(zhí)行所述直播業(yè)務(wù)插件的插件項(xiàng)目,以進(jìn)行插件項(xiàng)目的生命周期的回調(diào);和/或
通過(guò)反射機(jī)制,將ActivityThread中的成員變量mInstrumentation的實(shí)例替換為插件項(xiàng)目的實(shí)例,通過(guò)重寫Instrumentation的newActivty方法來(lái)實(shí)現(xiàn)插件項(xiàng)目的實(shí)例化,以利用所述mInstrumentation進(jìn)行插件項(xiàng)目的生命周期的回調(diào)。
可選的,所述方法還包括:
在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包前,對(duì)所述數(shù)據(jù)包進(jìn)行安全驗(yàn)證。
根據(jù)本申請(qǐng)實(shí)施例的第二方面,提供一種直播應(yīng)用程序的管理裝置,所述裝置包括:
指令接收模塊,用于:接收直播服務(wù)端所發(fā)送的直播業(yè)務(wù)更新指令;
數(shù)據(jù)包獲取模塊,用于:在直播業(yè)務(wù)更新指令的指示下,從直播服務(wù)端獲取直播業(yè)務(wù)插件對(duì)應(yīng)的數(shù)據(jù)包,所述數(shù)據(jù)包預(yù)先開發(fā),并獨(dú)立于其他直播業(yè)務(wù)插件對(duì)應(yīng)的數(shù)據(jù)包;
加載模塊,用于:動(dòng)態(tài)加載所獲取的數(shù)據(jù)包,將所述直播業(yè)務(wù)插件添加至應(yīng)用程序中,通過(guò)所述直播業(yè)務(wù)插件更新應(yīng)用程序的直播業(yè)務(wù)功能。
可選的,所述數(shù)據(jù)包中包括資源,所述加載模塊,包括資源加載子模塊,用于在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包時(shí),通過(guò)如下方式加載所述資源:
通過(guò)反射機(jī)制調(diào)用操作系統(tǒng)的資源管理器的成員函數(shù),將所述資源的路徑提供給所述成員函數(shù),并利用所述成員函數(shù)為所述資源創(chuàng)建資源對(duì)象,完成所述資源的動(dòng)態(tài)加載。
可選的,所述數(shù)據(jù)包中包括類文件,所述加載模塊,包括類文件加載模塊,用于在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包時(shí),通過(guò)如下方式加載所述類文件:
通過(guò)操作系統(tǒng)的類加載器加載所述類文件,并執(zhí)行所述類文件,完成所述類文件的動(dòng)態(tài)加載。
可選的,所述裝置還包括回調(diào)模塊,用于:
在所述直播業(yè)務(wù)插件運(yùn)行時(shí),通過(guò)如下方式進(jìn)行插件項(xiàng)目的生命周期的回調(diào):
通過(guò)應(yīng)用程序的主項(xiàng)目代理執(zhí)行所述直播業(yè)務(wù)插件的插件項(xiàng)目,以進(jìn)行插件項(xiàng)目的生命周期的回調(diào);和/或
通過(guò)反射機(jī)制,將ActivityThread中的成員變量mInstrumentation的實(shí)例替換為插件項(xiàng)目的實(shí)例,通過(guò)重寫Instrumentation的newActivty方法來(lái)實(shí)現(xiàn)插件項(xiàng)目的實(shí)例化,以利用所述mInstrumentation進(jìn)行插件項(xiàng)目的生命周期的回調(diào)。
可選的,所述裝置還包括安全驗(yàn)證模塊,用于:在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包前,對(duì)所述數(shù)據(jù)包進(jìn)行安全驗(yàn)證。
本申請(qǐng)的實(shí)施例提供的技術(shù)方案可以包括以下有益效果:
本申請(qǐng)中,可以接收直播服務(wù)端所發(fā)送的直播業(yè)務(wù)更新指令;在直播業(yè)務(wù)更新指令的指示下,從服務(wù)端獲取直播業(yè)務(wù)插件對(duì)應(yīng)的數(shù)據(jù)包,所述數(shù)據(jù)包預(yù)先開發(fā),并獨(dú)立于其他功能的直播業(yè)務(wù)插件;動(dòng)態(tài)加載所述數(shù)據(jù)包,將所述直播業(yè)務(wù)插件添加至應(yīng)用程序中,通過(guò)所述直播業(yè)務(wù)插件更新應(yīng)用程序的直播業(yè)務(wù)功能。本實(shí)施例中,通過(guò)將業(yè)務(wù)功能開發(fā)為獨(dú)立的數(shù)據(jù)包,在應(yīng)用程序需要更新時(shí),應(yīng)用程序可以自動(dòng)下載數(shù)據(jù)包并進(jìn)行動(dòng)態(tài)加載,因此不需要安裝新版本的應(yīng)用程序,能減少用戶操作,給用戶提供了便利,防止用戶流失。
通過(guò)應(yīng)用本實(shí)施例的直播應(yīng)用程序的管理方案,直播服務(wù)商可以根據(jù)不同的業(yè)務(wù)需求,快速更新業(yè)務(wù)插件。當(dāng)直播應(yīng)用程序出現(xiàn)問(wèn)題時(shí),能在線更新插件,修復(fù)問(wèn)題。并且,可以減少頻繁發(fā)版的過(guò)程,解決新版本用戶覆蓋率低的過(guò)程。還可以減少用戶應(yīng)版本升級(jí),繁瑣的安裝操作過(guò)程。同時(shí),還可以解決安裝包體積不斷變大的問(wèn)題,提升手機(jī)客戶端的用戶體驗(yàn),增加直播應(yīng)用程序的高可用性。通過(guò)上述方案,開發(fā)人員可以將業(yè)務(wù)模塊盡可能抽象出來(lái),并能在一個(gè)獨(dú)立工程中開發(fā),減低耦合,也減少在同一個(gè)工程項(xiàng)目中開發(fā)所帶來(lái)的代碼沖突。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本申請(qǐng)。
附圖說(shuō)明
此處的附圖被并入說(shuō)明書中并構(gòu)成本說(shuō)明書的一部分,示出了符合本申請(qǐng)的實(shí)施例,并與說(shuō)明書一起用于解釋本申請(qǐng)的原理。
圖1A是本申請(qǐng)根據(jù)一示例性實(shí)施例示出的一種直播應(yīng)用程序的管理方法的應(yīng)用場(chǎng)景示意圖。
圖1B是本申請(qǐng)根據(jù)一示例性實(shí)施例示出的一種直播應(yīng)用程序的界面示意圖。
圖2是本申請(qǐng)根據(jù)一示例性實(shí)施例示出的一種直播應(yīng)用程序的管理方法的流程圖。
圖3是本申請(qǐng)根據(jù)一示例性實(shí)施例示出的一種直播應(yīng)用程序的管理裝置的框圖。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。
在本申請(qǐng)使用的術(shù)語(yǔ)是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請(qǐng)。在本申請(qǐng)和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語(yǔ)“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請(qǐng)可能采用術(shù)語(yǔ)第一、第二、第三等來(lái)描述各種信息,但這些信息不應(yīng)限于這些術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請(qǐng)范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語(yǔ)境,如在此所使用的詞語(yǔ)“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
如圖1A所示,是本申請(qǐng)根據(jù)一示例性實(shí)施例示出的一種直播應(yīng)用程序的管理方法的應(yīng)用場(chǎng)景示意圖,圖1A中包括作為服務(wù)端設(shè)備的服務(wù)器、以及作為客戶端設(shè)備的智能手機(jī)和平板電腦。其中,客戶端設(shè)備還可以是PDA(Personal Digital Assistant,個(gè)人數(shù)字助理)、多媒體播放器、可穿戴設(shè)備等智能設(shè)備。
直播應(yīng)用程序中,根據(jù)不同的業(yè)務(wù)需求,會(huì)涉及秀場(chǎng)、現(xiàn)場(chǎng)、玩唱會(huì)或電競(jìng)等不同的直播業(yè)務(wù)功能;或者,當(dāng)直播間有重要活動(dòng)(如年度盛典、情人節(jié)活動(dòng)、新年活動(dòng)、圣誕活動(dòng)等)時(shí),直播應(yīng)用程序中也會(huì)提供較多的業(yè)務(wù)功能。如圖1B所示,是本申請(qǐng)根據(jù)一示例性實(shí)施例示出的一種直播應(yīng)用程序的界面示意圖,圖1B中示出了直播應(yīng)用程序中的四種不同的業(yè)務(wù)功能。
相關(guān)技術(shù)中,若直播業(yè)務(wù)有更新,通常需要在原應(yīng)用程序的基礎(chǔ)上迭代開發(fā),發(fā)布新版本的應(yīng)用程序,由用戶在終端中下載并安裝。此種方式下,需要用戶手動(dòng)升級(jí)安裝新版本,新版本應(yīng)用程序的更新過(guò)程較為繁瑣;由于用戶并不一定都會(huì)主動(dòng)升級(jí)安裝新版本,因此新版本的用戶覆蓋率往往也無(wú)法保證,甚至還會(huì)導(dǎo)致用戶流失。
實(shí)際應(yīng)用中還經(jīng)常出現(xiàn)如下情況:在應(yīng)用開發(fā)過(guò)程中,對(duì)于一種業(yè)務(wù)需求可能會(huì)有多種設(shè)計(jì)方案,當(dāng)無(wú)法確定哪種方案是最優(yōu)的時(shí)候,可能會(huì)通過(guò)多次的版本迭代發(fā)布試錯(cuò),然后觀察用戶使用的統(tǒng)計(jì)數(shù)據(jù),進(jìn)而選擇最多用戶使用的方案,這個(gè)過(guò)程為A/B TEST過(guò)程。由于每次都需要發(fā)布新版本的應(yīng)用程序,該過(guò)程較為漫長(zhǎng),且覆蓋率較低。
而本申請(qǐng)實(shí)施例中所提供的方案,可以接收直播服務(wù)端所發(fā)送的直播業(yè)務(wù)更新指令;在直播業(yè)務(wù)更新指令的指示下,從服務(wù)端獲取直播業(yè)務(wù)插件對(duì)應(yīng)的數(shù)據(jù)包,所述數(shù)據(jù)包預(yù)先開發(fā),并獨(dú)立于其他功能的直播業(yè)務(wù)插件;動(dòng)態(tài)加載所述數(shù)據(jù)包,將所述直播業(yè)務(wù)插件添加至應(yīng)用程序中,通過(guò)所述直播業(yè)務(wù)插件更新應(yīng)用程序的直播業(yè)務(wù)功能。本實(shí)施例中,通過(guò)將業(yè)務(wù)功能開發(fā)為獨(dú)立的數(shù)據(jù)包,在應(yīng)用程序需要更新時(shí),應(yīng)用程序可以后臺(tái)下載數(shù)據(jù)包并進(jìn)行動(dòng)態(tài)加載,因此不需要安裝新版本的應(yīng)用程序,能減少用戶操作,給用戶提供了便利,防止用戶流失。接下來(lái)對(duì)本申請(qǐng)實(shí)施例進(jìn)行詳細(xì)說(shuō)明。
如圖2所示,圖2是本申請(qǐng)根據(jù)一示例性實(shí)施例示出的一種直播應(yīng)用程序的管理方法的流程圖,可應(yīng)用于智能設(shè)備,包括以下步驟201至203:
在步驟201中,接收直播服務(wù)端所發(fā)送的直播業(yè)務(wù)更新指令。
在步驟202中,在直播業(yè)務(wù)更新指令的指示下,從直播服務(wù)端獲取直播業(yè)務(wù)插件對(duì)應(yīng)的數(shù)據(jù)包,所述數(shù)據(jù)包預(yù)先開發(fā),并獨(dú)立于其他功能的直播業(yè)務(wù)插件。
在步驟203中,動(dòng)態(tài)加載所獲取的數(shù)據(jù)包,將對(duì)應(yīng)的所述直播業(yè)務(wù)插件添加至應(yīng)用程序中,通過(guò)所述直播業(yè)務(wù)插件更新應(yīng)用程序的直播業(yè)務(wù)功能。
本申請(qǐng)實(shí)施例中,智能設(shè)備可以為智能手機(jī)、平板電腦、PDA(Personal Digital Assistant,個(gè)人數(shù)字助理)、電子書閱讀器、智能手表、多媒體播放器等等。當(dāng)然,本申請(qǐng)實(shí)施例也不排除在計(jì)算機(jī)上的應(yīng)用。通常,智能設(shè)備中安裝有操作系統(tǒng),操作系統(tǒng)是管理和控制計(jì)算機(jī)硬件與軟件資源的計(jì)算機(jī)程序,是直接運(yùn)行在設(shè)備上的最基本的系統(tǒng)軟件,任何其他應(yīng)用軟件須在操作系統(tǒng)的支持下才能運(yùn)行。常見(jiàn)的智能設(shè)備的操作系統(tǒng)包括有Android(安卓)操作系統(tǒng)、iOS(蘋果公司開發(fā)的手持設(shè)備操作系統(tǒng))、Linux操作系統(tǒng)或Windows操作系統(tǒng)等。
本實(shí)施例的直播應(yīng)用程序,由直播服務(wù)商提供,并由用戶安裝于智能設(shè)備中。直播業(yè)務(wù)插件,是指沒(méi)有被安裝且希望借助已經(jīng)安裝到智能設(shè)備上的直播應(yīng)用程序,通過(guò)該直播應(yīng)用程序運(yùn)行的插件。直播服務(wù)端的開發(fā)人員可以根據(jù)直播業(yè)務(wù)需求,開發(fā)新的直播業(yè)務(wù)插件的工程文件,將直播業(yè)務(wù)插件編譯封裝成數(shù)據(jù)包。
利用本申請(qǐng)實(shí)施例的方法,服務(wù)端的開發(fā)人員可以將應(yīng)用程序的各個(gè)功能獨(dú)立的模塊盡可能的抽離拆分出來(lái),開發(fā)互相獨(dú)立的應(yīng)用模塊,也即是業(yè)務(wù)插件項(xiàng)目,從而使得各個(gè)業(yè)務(wù)插件之間具有較低的耦合度。當(dāng)有新的直播業(yè)務(wù)功能時(shí),可以開發(fā)獨(dú)立的直播業(yè)務(wù)插件,將開發(fā)的工程文件打包為數(shù)據(jù)包,該數(shù)據(jù)包通常為.zip、.apk或.so等格式的文件。該數(shù)據(jù)包可提供給智能終端的應(yīng)用程序,由應(yīng)用程序動(dòng)態(tài)加載該數(shù)據(jù)包,將直播業(yè)務(wù)插件添加至應(yīng)用程序中。
在實(shí)際應(yīng)用中,由于不同智能設(shè)備的機(jī)型、操作系統(tǒng)、設(shè)備屏幕等差異,為了適配不同的智能設(shè)備,直播服務(wù)商所提供的應(yīng)用程序會(huì)有多種不同的版本,針對(duì)不同版本的應(yīng)用程序,所對(duì)應(yīng)開發(fā)的直播業(yè)務(wù)插件也可能有不同的版本。服務(wù)端可以存儲(chǔ)直播業(yè)務(wù)插件與應(yīng)用程序的對(duì)應(yīng)關(guān)系,具體的,可以為直播業(yè)務(wù)插件和應(yīng)用程序都配置相應(yīng)標(biāo)識(shí),直播業(yè)務(wù)插件的標(biāo)識(shí)可以指示如下一種或多種信息:插件的版本、插件的生效時(shí)間(即插件是在什么時(shí)間范圍內(nèi)是可用的)、覆蓋類型(如iOS系統(tǒng),Android系統(tǒng)等)、覆蓋用戶類型(如收費(fèi)用戶、免費(fèi)用戶等),以便于對(duì)應(yīng)的插件數(shù)據(jù)包能下發(fā)到對(duì)應(yīng)類型的智能設(shè)備。
開發(fā)人員可以根據(jù)業(yè)務(wù)需要,選擇需要更新的數(shù)據(jù)包,并下發(fā)給客戶端。具體的下發(fā)過(guò)程,可以是服務(wù)端向應(yīng)用程序推送直播業(yè)務(wù)更新指令,直播業(yè)務(wù)更新指令中可以攜帶有數(shù)據(jù)包的具體下載地址以及標(biāo)識(shí),應(yīng)用程序在接收到直播業(yè)務(wù)更新指令后,根據(jù)下載地址下載匹配的數(shù)據(jù)包。具體下載時(shí),還可以將當(dāng)前應(yīng)用程序中所添加的插件版本與待下載的版本號(hào)進(jìn)行對(duì)比,若當(dāng)前應(yīng)用程序中所添加的插件版本不是最新版本,則可以下載更新,若不是最新版本,則可以不更新插件。
應(yīng)用程序在下載數(shù)據(jù)包后,可以對(duì)所獲取的數(shù)據(jù)包進(jìn)行動(dòng)態(tài)加載的處理。為了防止插件的數(shù)據(jù)包在下載過(guò)程中出錯(cuò)或被篡改等問(wèn)題,在一個(gè)可選的實(shí)現(xiàn)方式中,所述方法還包括:
在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包前,對(duì)所述數(shù)據(jù)包進(jìn)行安全驗(yàn)證。
其中,安全驗(yàn)證可以采用相關(guān)技術(shù)中的消息摘要算法、對(duì)稱密鑰、非對(duì)稱密鑰等多種安全驗(yàn)證方式。所下載的數(shù)據(jù)包通過(guò)安全驗(yàn)證后,才可進(jìn)行后續(xù)的動(dòng)態(tài)加載處理;若沒(méi)有通過(guò)安全驗(yàn)證,則表示數(shù)據(jù)包有可能被篡改,或者是文件發(fā)生錯(cuò)誤等,應(yīng)用程序則可以進(jìn)行重新下載或停止更新等處理,從而提高應(yīng)用程序管理的安全性。
本申請(qǐng)實(shí)施例中,對(duì)于Android操作系統(tǒng),將業(yè)務(wù)插件包動(dòng)態(tài)加載至應(yīng)用程序時(shí),需要考慮資源加載、類文件加載以及生命周期回調(diào)等問(wèn)題。接下來(lái)針對(duì)上述問(wèn)題進(jìn)行詳細(xì)說(shuō)明。
資源加載:
本實(shí)施例中,所述業(yè)務(wù)插件中包括資源,在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包時(shí),通過(guò)如下方式加載所述資源:
通過(guò)反射機(jī)制調(diào)用操作系統(tǒng)的資源管理器的成員函數(shù),將所述資源的路徑提供給所述成員函數(shù),并利用所述成員函數(shù)為所述資源創(chuàng)建資源對(duì)象,完成所述資源的動(dòng)態(tài)加載。
其中,資源是指插件數(shù)據(jù)包中所包括的圖像文件、xml(可擴(kuò)展標(biāo)記語(yǔ)言,Extensible Markup Language)文件、動(dòng)畫文件或音視頻文件等文件。具體的,Android系統(tǒng)中,資源加載需要調(diào)用操作系統(tǒng)的AssetManager(資源管理器)中的addAssetPath方法(資源管理器的成員函數(shù))。由于addAssetPath方法屬于隱藏接口,無(wú)法直接調(diào)用。因此本實(shí)施例采用反射機(jī)制調(diào)用該方法。
反射機(jī)制,是指在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為Java(一種計(jì)算機(jī)編程語(yǔ)言)語(yǔ)言的反射機(jī)制。因此,通過(guò)反射機(jī)制調(diào)用addAssetPath方法,將資源的路徑提供給所調(diào)用的addAssetPath方法。其中,資源文件整合在數(shù)據(jù)包中,此處資源的路徑可以指數(shù)據(jù)包的路徑。通過(guò)addAssetPath方法,可以將數(shù)據(jù)包中的資源加載至AssetManager中,之后通過(guò)AssetManager來(lái)創(chuàng)建一個(gè)新的Resources(資源)對(duì)象,完成資源的加載。通過(guò)創(chuàng)建的Resources對(duì)象,應(yīng)用程序就可以使用數(shù)據(jù)包中的資源,從而共享插件和應(yīng)用程序的資源文件。
類文件加載:
本實(shí)施例中,所述業(yè)務(wù)插件中包括類(class)文件,在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包時(shí),通過(guò)如下方式加載所述類文件:
通過(guò)操作系統(tǒng)的類加載器加載所述類文件,并執(zhí)行所述類文件,完成所述類文件的動(dòng)態(tài)加載。
在Java中,類加載器(ClassLoader),可以用來(lái)動(dòng)態(tài)裝載class文件,標(biāo)準(zhǔn)的Java SDK(軟件開發(fā)工具包,Software Development Kit)包含ClassLoader類,通過(guò)該類可以裝載需要的class文件,前提是ClassLoader類初始化需得到class文件的路徑。ClassLoader可以自由靈活的加載類文件,并且對(duì)于Android而言,其本質(zhì)上使用的是Java開發(fā),使用標(biāo)準(zhǔn)的Java編譯器能編譯出class文件,Android的工程文件編譯后,數(shù)據(jù)包中所包含的類文件為dex類型的文件,dex文件是將class文件重新打包所生成的,打包的規(guī)則不是簡(jiǎn)單地壓縮,而是完全對(duì)class文件內(nèi)部的各種函數(shù)表,變量表進(jìn)行優(yōu)化,產(chǎn)生一個(gè)新的文件。因此加載這種特殊的class文件時(shí),可以采用DexClassLoader加載器完成類文件的動(dòng)態(tài)加載。
生命周期的回調(diào):
本實(shí)施例中,直播業(yè)務(wù)插件動(dòng)態(tài)加載后,插件可以在應(yīng)用程序中運(yùn)行,然而,由于插件數(shù)據(jù)包中的Activity(活動(dòng))等插件項(xiàng)目沒(méi)有在主項(xiàng)目的Manifest里面注冊(cè),所以無(wú)法經(jīng)歷操作系統(tǒng)Framework層級(jí)的一系列初始化過(guò)程,最終導(dǎo)致獲得的Activity實(shí)例并沒(méi)有生命周期,以及無(wú)法使用res資源。因此,本實(shí)施例通過(guò)如下兩種方式實(shí)現(xiàn)生命周期的回調(diào)。
第一種、
通過(guò)應(yīng)用程序的主項(xiàng)目代理執(zhí)行所述直播業(yè)務(wù)插件的插件項(xiàng)目,以進(jìn)行插件項(xiàng)目的生命周期的回調(diào)。
本實(shí)施例通過(guò)代理的形式實(shí)現(xiàn)插件項(xiàng)目生命周期的回調(diào),及插件項(xiàng)目視圖的創(chuàng)建及綁定。因?yàn)閼?yīng)用程序主項(xiàng)目(也稱為宿主項(xiàng)目)的activity(Android的四大基礎(chǔ)組件之一),services(Android的四大基礎(chǔ)組件之一)是受操作系統(tǒng)管理及初始化,宿主項(xiàng)目可以接收到操作系統(tǒng)的生命周期的回調(diào)。本實(shí)施例通過(guò)宿主項(xiàng)目去代理的執(zhí)行插件項(xiàng)目的activity或service,進(jìn)而讓插件項(xiàng)目也能收到操作系統(tǒng)的生命周期的回調(diào),并且插件項(xiàng)目也能通過(guò)宿主項(xiàng)目的引用,通過(guò)宿主項(xiàng)目設(shè)置視圖的創(chuàng)建及更新。
第二種、
通過(guò)反射機(jī)制,將ActivityThread中的成員變量mInstrumentation的實(shí)例替換為插件項(xiàng)目的實(shí)例,通過(guò)重寫Instrumentation的newActivty方法來(lái)實(shí)現(xiàn)插件項(xiàng)目的實(shí)例化,以利用所述mInstrumentation進(jìn)行插件項(xiàng)目的生命周期的回調(diào)。
本實(shí)施例中,在Android操作系統(tǒng)中,Instrumentation是ActivityThread的一個(gè)管家,宿主項(xiàng)目的生命周期的回調(diào),操作系統(tǒng)底層也是通過(guò)Instrumentation進(jìn)行調(diào)用。因此,本實(shí)施例通過(guò)Java的反射機(jī)制,通過(guò)調(diào)用Instrumentation方法,將Instrumentation方法中的mInstrumentation成員變量的實(shí)例替換為插件項(xiàng)目的實(shí)例,通過(guò)重寫Instrumentation的newActivty的方法能實(shí)現(xiàn)插件項(xiàng)目的實(shí)例化,從而可以利用mInstrumentation解決生命周期回調(diào)的問(wèn)題。
由上述實(shí)施例可知,通過(guò)應(yīng)用本實(shí)施例的直播應(yīng)用程序的管理方法,直播服務(wù)商可以根據(jù)不同的業(yè)務(wù)需求,快速更新業(yè)務(wù)插件。當(dāng)直播應(yīng)用程序出現(xiàn)問(wèn)題時(shí),能在線更新插件,修復(fù)問(wèn)題。并且,可以減少頻繁發(fā)版的過(guò)程,解決新版本用戶覆蓋率低的過(guò)程。還可以減少用戶應(yīng)版本升級(jí),繁瑣的安裝操作過(guò)程。同時(shí),還可以解決安裝包體積不斷變大的問(wèn)題,提升手機(jī)客戶端的用戶體驗(yàn),增加直播應(yīng)用程序的高可用性。通過(guò)上述方法,開發(fā)人員可以將業(yè)務(wù)模塊盡可能抽象出來(lái),并能在一個(gè)獨(dú)立工程中開發(fā),減低耦合,也減少在同一個(gè)工程項(xiàng)目中開發(fā)所帶來(lái)的代碼沖突。
與前述直播應(yīng)用程序的管理方法的實(shí)施例相對(duì)應(yīng),本申請(qǐng)還提供了直播應(yīng)用程序的管理裝置的實(shí)施例。
如圖3所示,圖3是本申請(qǐng)根據(jù)一示例性實(shí)施例示出的一種直播應(yīng)用程序的管理裝置的框圖,所述裝置包括:
指令接收模塊31,用于:接收直播服務(wù)端所發(fā)送的直播業(yè)務(wù)更新指令。
數(shù)據(jù)包獲取模塊32,用于:在直播業(yè)務(wù)更新指令的指示下,從直播服務(wù)端獲取直播業(yè)務(wù)插件對(duì)應(yīng)的數(shù)據(jù)包,所述數(shù)據(jù)包預(yù)先開發(fā),并獨(dú)立于其他直播業(yè)務(wù)插件對(duì)應(yīng)的數(shù)據(jù)包。
加載模塊33,用于:動(dòng)態(tài)加載所獲取的數(shù)據(jù)包,將對(duì)應(yīng)的所述直播業(yè)務(wù)插件添加至應(yīng)用程序中,通過(guò)所述直播業(yè)務(wù)插件更新應(yīng)用程序的直播業(yè)務(wù)功能。
在一個(gè)可選的實(shí)現(xiàn)方式中,所述數(shù)據(jù)包中包括資源,所述加載模塊31,包括資源加載子模塊(圖3中未示出),用于在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包時(shí),通過(guò)如下方式加載所述資源:
通過(guò)反射機(jī)制調(diào)用操作系統(tǒng)的資源管理器的成員函數(shù),將所述資源的路徑提供給所述成員函數(shù),并利用所述成員函數(shù)為所述資源創(chuàng)建資源對(duì)象,完成所述資源的動(dòng)態(tài)加載。
在一個(gè)可選的實(shí)現(xiàn)方式中,所述數(shù)據(jù)包中包括類文件,所述加載模塊31,包括類文件加載模塊(圖3中未示出),用于在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包時(shí),通過(guò)如下方式加載所述類文件:
通過(guò)操作系統(tǒng)的類加載器加載所述類文件,并執(zhí)行所述類文件,完成所述類文件的動(dòng)態(tài)加載。
在一個(gè)可選的實(shí)現(xiàn)方式中,所述裝置還包括回調(diào)模塊(圖3中未示出),用于:
在所述直播業(yè)務(wù)插件運(yùn)行時(shí),通過(guò)如下方式進(jìn)行插件項(xiàng)目的生命周期的回調(diào):
通過(guò)應(yīng)用程序的主項(xiàng)目代理執(zhí)行所述直播業(yè)務(wù)插件的插件項(xiàng)目,以進(jìn)行插件項(xiàng)目的生命周期的回調(diào);
和/或
通過(guò)反射機(jī)制,將ActivityThread中的成員變量mInstrumentation的實(shí)例替換為插件項(xiàng)目的實(shí)例,通過(guò)重寫Instrumentation的newActivty方法來(lái)實(shí)現(xiàn)插件項(xiàng)目的實(shí)例化,以利用所述mInstrumentation進(jìn)行插件項(xiàng)目的生命周期的回調(diào)。
在一個(gè)可選的實(shí)現(xiàn)方式中,所述裝置還包括安全驗(yàn)證模塊(圖3中未示出),用于:在動(dòng)態(tài)加載所獲取的數(shù)據(jù)包前,對(duì)所述數(shù)據(jù)包進(jìn)行安全驗(yàn)證。
上述裝置中各個(gè)模塊的功能和作用的實(shí)現(xiàn)過(guò)程具體詳見(jiàn)上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過(guò)程,在此不再贅述。
對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的模塊可以是或者也可以不是物理上分開的,作為模塊顯示的部件可以是或者也可以不是物理模塊,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)模塊上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
本領(lǐng)域技術(shù)人員在考慮說(shuō)明書及實(shí)踐這里申請(qǐng)的發(fā)明后,將容易想到本申請(qǐng)的其它實(shí)施方案。本申請(qǐng)旨在涵蓋本申請(qǐng)的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本申請(qǐng)的一般性原理并包括本申請(qǐng)未申請(qǐng)的本技術(shù)領(lǐng)域中的公知常識(shí)或慣用技術(shù)手段。說(shuō)明書和實(shí)施例僅被視為示例性的,本申請(qǐng)的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本申請(qǐng)并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本申請(qǐng)的范圍僅由所附的權(quán)利要求來(lái)限制。
以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。