亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

應(yīng)用安裝、運(yùn)行方法及裝置的制造方法_3

文檔序號(hào):8395749閱讀:來(lái)源:國(guó)知局
它內(nèi)部包含資源和代碼以及相關(guān)的android組件定義等,要讓主app調(diào)起插件,則需要模擬一個(gè)app運(yùn)行的環(huán)境提供給插件運(yùn)行,其中重點(diǎn)包括:插件代碼和資源的加載、插件資源注入、組件托管和代理。另外為讓插件保持原有的結(jié)構(gòu)和代碼邏輯,我們需要處理他們的特定調(diào)用:如this、super調(diào)用、系統(tǒng)組件屬性模擬(launch_mode、intent-filter 等)。
[0124]首先,利用主應(yīng)用調(diào)用插件。Android中大部分組件是需要注冊(cè)在apk的Androidmanifest.xml中才能被系統(tǒng)正常調(diào)用的(如Activity、Service等),而本發(fā)明實(shí)施例中的插件并沒(méi)有安裝,此時(shí)它的組件是沒(méi)有向系統(tǒng)注冊(cè)的,app無(wú)法像使用傳統(tǒng)的組件那樣調(diào)起它。要使用插件中的組件,就必須解決這個(gè)問(wèn)題。為解決這一問(wèn)題,本發(fā)明實(shí)施例采用在主應(yīng)用中建立托管插件組件的處理方法,其中,托管插件組件能夠模擬實(shí)現(xiàn)同一輔助功能、且嵌入到主應(yīng)用中的非獨(dú)立插件被調(diào)用時(shí)所產(chǎn)生事件。當(dāng)監(jiān)測(cè)到任一事件發(fā)生時(shí),托管插件組件被觸發(fā)將發(fā)生的事件轉(zhuǎn)至非獨(dú)立插件具備的事件處理函數(shù)中進(jìn)行處理。
[0125]以活動(dòng)(Activity)為例,當(dāng)插件為活動(dòng)Activity時(shí),托管插件組件為代理Activity,能夠模擬Activity生命周期和Activity事件;。當(dāng)Activity事件發(fā)生時(shí),代理Activity通過(guò)反射調(diào)用將Activity事件傳遞到插件Activity事件對(duì)應(yīng)的處理函數(shù)中進(jìn)行處理。即,在主app中定義一個(gè)專(zhuān)用的代理Activity (ProxyActivity),該Activity專(zhuān)門(mén)用來(lái)代理插件的Activity,模擬實(shí)現(xiàn)插件Activity的生命周期(onCreate、onStart等)和各種事件,插件Activity作為一個(gè)普通的java對(duì)象創(chuàng)建,事件通過(guò)反射調(diào)用傳遞到插件Activity對(duì)于的處理函數(shù)中,該過(guò)程對(duì)于插件來(lái)說(shuō)是透明,它還是照常實(shí)現(xiàn)Activity的邏輯。
[0126]ProxyActivity不是真正的Activity,它沒(méi)有插件的類(lèi)加載器和資源,代理Activity能解決的只是模擬系統(tǒng)主動(dòng)發(fā)起,組件被動(dòng)接收的事件,當(dāng)插件Activity使用例如this或者super等主動(dòng)調(diào)用系統(tǒng)提供的方法時(shí)(如SetContentView等),必然會(huì)出現(xiàn)問(wèn)題。
[0127]為了解決此問(wèn)題,本發(fā)明實(shí)施例定義了一個(gè)非常簡(jiǎn)單的插件實(shí)現(xiàn)規(guī)范:插件中使用的所有Activity必須繼承自插件sdk中一個(gè)特定的PluginActivity。在插件架構(gòu)良好,大部分同類(lèi)Activity都有統(tǒng)一的父類(lèi)的情況下,只需要將這些父類(lèi)的父類(lèi)替換為PluginActivity即可。PluginActivity會(huì)重寫(xiě)系統(tǒng)的關(guān)鍵方法,將子類(lèi)的調(diào)用直接轉(zhuǎn)發(fā)給ProxyActiviy,這樣,插件Activity使用this或者super調(diào)用的比較關(guān)鍵的方法,都將被ProxyActivity所處理,就像它自己就是一個(gè)真實(shí)的Activity —樣。
[0128]通常情況下,一個(gè)app只能擁有一個(gè)資源對(duì)象和一個(gè)加載app代碼的類(lèi)加載器,所以在app各處使用的資源和代碼都是主app的。如果要在不限定條件不破壞插件原有代碼結(jié)構(gòu)和邏輯的情況下調(diào)用插件里面的資源和代碼,那么就必須將插件的資源和類(lèi)加載器強(qiáng)行注入到主應(yīng)用調(diào)用各插件所使用的上下文環(huán)境中,以供主應(yīng)用調(diào)用各插件。
[0129]具體地,當(dāng)主應(yīng)用調(diào)用一個(gè)插件時(shí),利用反射將主應(yīng)用的上下文的資源對(duì)象和類(lèi)加載器替換為該插件的資源對(duì)象和類(lèi)加載器;利用該插件的資源對(duì)象和類(lèi)加載器分別加載插件的資源和代碼,執(zhí)行插件的輔助功能。當(dāng)呼起一個(gè)插件時(shí),一般情況下是調(diào)起一個(gè)插件的組件(Activity、Service等),前面提到過(guò),本發(fā)明是主應(yīng)用調(diào)用插件的組件,這時(shí)提供給插件使用的是主應(yīng)用的上下文(context),如果插件直接使用它必然出錯(cuò),因此,本實(shí)施例在使用之前強(qiáng)行的利用反射將該context中的資源對(duì)象和類(lèi)加載器(mResource、mClassLoader)等對(duì)象替換為插件的資源和類(lèi)加載器,這樣,插件就可以直接使用自己的資源和代碼了。
[0130]因主應(yīng)用同時(shí)與多個(gè)插件存在互動(dòng)關(guān)系,因此,主應(yīng)用通過(guò)設(shè)置各插件上的插件接口與各插件進(jìn)行通信,以實(shí)現(xiàn)對(duì)各插件的調(diào)用。例如,插件組件給插件提供了一個(gè)插件接口(IPlugin),可以幫助插件與宿主通信。關(guān)鍵方法為onLoadO、onCommandO,onLoadO在插件被加載時(shí)調(diào)用,插件可在該函數(shù)中進(jìn)行一些初始化工作,onCo_and O在插件接收到命令時(shí)被調(diào)用,插件可以在該函數(shù)中實(shí)現(xiàn)命令的處理。
[0131]當(dāng)主應(yīng)用同時(shí)調(diào)用多個(gè)插件時(shí),當(dāng)其中任一個(gè)插件發(fā)出命令時(shí),插件管理器接收命令并將命令分發(fā)至插件管理器管理的所有插件,其中,對(duì)命令感興趣的插件對(duì)其進(jìn)行處理,產(chǎn)生應(yīng)答結(jié)果;插件管理器接收對(duì)命令的應(yīng)答結(jié)果,并將其返回至發(fā)出命令的插件。即可以在插件中定義一個(gè)統(tǒng)一的規(guī)范,當(dāng)插件發(fā)出一個(gè)命令時(shí),插件管理器將命令分發(fā)給所有的插件,插件只需在接口類(lèi)的應(yīng)答(onCommand)中處理自己感興趣的命令即可,命令的傳遞使用系統(tǒng)的Intent類(lèi)封裝,這樣即保證了插件間不存在依賴性,又避免了插件代碼的依賴。圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的主應(yīng)用調(diào)用多個(gè)插件的示意圖。
[0132]根據(jù)上文的描述可知,本發(fā)明實(shí)施例可使應(yīng)用的功能插件化,如應(yīng)用卡片、應(yīng)用模塊、應(yīng)用皮膚等均可插件化獨(dú)立化,從而使得應(yīng)用的開(kāi)發(fā)可以分散的同步進(jìn)行,提高了現(xiàn)有產(chǎn)品的價(jià)值,并解決了應(yīng)用體積大的問(wèn)題,以及某些小的更新也需要更新整個(gè)app的問(wèn)題,提高用戶體驗(yàn),縮短用戶流程。具體地,
[0133]1、插件資源和代碼動(dòng)態(tài)加載解決了插件動(dòng)態(tài)更新的問(wèn)題,這樣插件不需要包含在主app的安裝包中。
[0134]2、組件代理和托管,解決了插件中組件定義的問(wèn)題,降低插件與宿主的耦合性。
[0135]3、插件資源和類(lèi)加載器的注入,保證了插件原有邏輯和資源,使插件無(wú)需做大改動(dòng)就可作為插件運(yùn)行。
[0136]4、插件中this、super的調(diào)用處理,保證插件代碼完整的運(yùn)行。
[0137]5、插件間的互相調(diào)用實(shí)現(xiàn),可以讓插件間無(wú)依賴性,并可互相調(diào)起。
[0138]6、插件接口的實(shí)現(xiàn)給插件提供了一種與宿主通信的機(jī)制。
[0139]圖6示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的插件實(shí)現(xiàn)流程的示意圖。參見(jiàn)圖6,插件管理器對(duì)插件進(jìn)行管理,進(jìn)行初始化操作和預(yù)加載等預(yù)處理。該處理過(guò)程與主app的啟動(dòng)過(guò)程是獨(dú)立的、異步的。當(dāng)主app初始化結(jié)束后,通過(guò)app功能界面發(fā)起插件調(diào)用,到插件管理器處調(diào)用需要的插件。隨后,插件啟動(dòng),并在app功能界面上加載并顯示新的插件功能界面。
[0140]基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供了一種應(yīng)用安裝裝置。圖7示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的應(yīng)用安裝裝置的一種結(jié)構(gòu)示意圖。參見(jiàn)圖7,該裝置至少包括:
[0141]功能確定模塊710,適于根據(jù)需求確定需實(shí)現(xiàn)的多類(lèi)功能,其中,多類(lèi)功能包括主功能和輔助功能;
[0142]分類(lèi)配置模塊720,與功能確定模塊710耦合,適于為主功能生成主應(yīng)用,以及,為各類(lèi)輔助功能生成獨(dú)立的插件;
[0143]安裝模塊730,與分類(lèi)配置模塊720耦合,適于安裝主應(yīng)用,其中,主應(yīng)用能夠根據(jù)需求調(diào)用不同的插件,以實(shí)現(xiàn)不同的輔助功能。
[0144]圖8示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的應(yīng)用安裝裝置的另一種結(jié)構(gòu)示意圖。在一個(gè)優(yōu)選的實(shí)施例中,參見(jiàn)圖7,應(yīng)用安裝裝置還可以包括:
[0145]插件加載模塊740,分別分類(lèi)配置模塊720以及安裝模塊730耦合,適于在主應(yīng)用安裝結(jié)束之后,在前臺(tái)顯示性地加載具備輔助功能的各插件;或者,在后臺(tái)靜默加載具備輔助功能的各插件。
[0146]在一個(gè)優(yōu)選的實(shí)施例中,插件加載模塊740還用于:
[0147]利用主應(yīng)用的類(lèi)加載器加載各插件的插件代碼;
[0148]將各插件的插件代碼加載到內(nèi)存中,為各插件生成本插件獨(dú)立的類(lèi)加載器;
[0149]利用各插件的類(lèi)加載器對(duì)應(yīng)加載各插件資源。
[0150]在一個(gè)優(yōu)選的實(shí)施例中,
[0151]各插件的插件代碼和資源被加載后用于在插件被調(diào)用時(shí)模擬插件運(yùn)行環(huán)境;以及
[0152]各插件加載結(jié)束后,由插件管理器對(duì)插件進(jìn)行統(tǒng)一命名以及管理。
[0153]基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供了一種應(yīng)用運(yùn)行裝置。圖9示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的應(yīng)用運(yùn)行裝置的一種結(jié)構(gòu)示意圖。參見(jiàn)圖9,該裝置至少包括:
[0154]啟動(dòng)模塊910,適于開(kāi)啟具備主功能的主應(yīng)用,其中,主應(yīng)用能夠調(diào)用具備除主功能外的其他輔助功能的插件;
[0155]選擇模塊920,與啟動(dòng)模塊910耦合,適于在主應(yīng)用的界面中根據(jù)需求選擇輔助功能對(duì)應(yīng)的插件標(biāo)識(shí);
[0156]調(diào)用模塊930,與選擇模塊920耦合,適于利用主應(yīng)用調(diào)用選擇的插件標(biāo)識(shí)所對(duì)應(yīng)的插件,以實(shí)現(xiàn)對(duì)應(yīng)的輔助功能。
[0157]在一個(gè)優(yōu)選的實(shí)施例中,調(diào)用模塊930還用于:
[0158]在主應(yīng)用中建立托管插件組件,其中,托管插件組件能夠模擬實(shí)現(xiàn)同一輔助功能、且嵌入到主應(yīng)用中的非獨(dú)立插件被調(diào)用時(shí)所產(chǎn)生事件;
[0159]當(dāng)監(jiān)測(cè)到任一事件發(fā)生時(shí),托管插件組件被觸發(fā)將發(fā)生的事件轉(zhuǎn)至非獨(dú)立插件具備的事件處理函數(shù)中進(jìn)行處理。
[0160]在一個(gè)優(yōu)選的實(shí)施例中,當(dāng)插件為活動(dòng)Activity時(shí),
[0161]托管插件組件為代理Activity,能夠模擬Activity生命周期和Activity事件;
[0162]當(dāng)Activity事件發(fā)生時(shí),代理Activity通過(guò)反射調(diào)用將Activity事件傳遞到插件Activity事件對(duì)
當(dāng)前第3頁(yè)1 2 3 4 5 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1