国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法與系統(tǒng)與流程

      文檔序號(hào):12595671閱讀:241來源:國(guó)知局
      移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法與系統(tǒng)與流程

      本發(fā)明涉及移動(dòng)應(yīng)用開發(fā)領(lǐng)域,尤其涉及一種移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法與系統(tǒng)。



      背景技術(shù):

      目前大多數(shù)的應(yīng)用程序都是使用Java語言編寫的原生應(yīng)用程序,或者為使用HTML5腳本編寫的網(wǎng)絡(luò)應(yīng)用程序。以安卓系統(tǒng)為例,一種是進(jìn)行安卓原生應(yīng)用程序的開發(fā),另一種是開發(fā)HTML5類型的web頁面。原生應(yīng)用程序的優(yōu)點(diǎn)是用戶體驗(yàn)好,缺點(diǎn)是必須通過發(fā)版進(jìn)行升級(jí)而不能直接在線更新。所以原生應(yīng)用程序不僅容易受到發(fā)版頻率的限制,而且會(huì)容易產(chǎn)生碎片化的版本。而使用HTML5編寫的網(wǎng)絡(luò)應(yīng)用程序的優(yōu)點(diǎn)是可以實(shí)現(xiàn)在線更新,不需要通過發(fā)版進(jìn)行升級(jí),缺點(diǎn)是只能在瀏覽器中加載,以致其性能受到影響,造成網(wǎng)絡(luò)應(yīng)用程序的用戶體驗(yàn)不如原生應(yīng)用程序。



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

      本發(fā)明的主要目的在于提供一種移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法與系統(tǒng),旨在解決不能保證用戶體驗(yàn)的同時(shí)實(shí)現(xiàn)熱更新的技術(shù)問題。

      為實(shí)現(xiàn)上述目的,本發(fā)明提供的一種移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法,所述方法包括以下步驟:

      獲取服務(wù)器中動(dòng)態(tài)布局程序的壓縮包,并將所述壓縮包加載到本地,其中,所述動(dòng)態(tài)布局程序使用JS腳本語言編寫;

      通過JS解析引擎將所述壓縮包解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后將所述內(nèi)存對(duì)象映射為本地對(duì)象;

      將所述本地對(duì)象掛載到控件模塊中進(jìn)行渲染使其在界面中顯示。

      可選地,所述獲取服務(wù)器中動(dòng)態(tài)布局程序的壓縮包,并將所述壓縮包加載到本地,其中,所述動(dòng)態(tài)布局程序使用JS腳本語言編寫的步驟之前包括:

      當(dāng)接收到外界發(fā)送的使用JS腳本語言編寫的動(dòng)態(tài)布局程序所對(duì)應(yīng)的壓縮包,將其上傳至服務(wù)器。

      可選地,所述通過JS解析引擎將所述壓縮包解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后將所述內(nèi)存對(duì)象映射為本地對(duì)象的步驟包括:

      初始化全局管理對(duì)象以及控件模塊,通過全局管理對(duì)象創(chuàng)建映射表,并將控件模塊注冊(cè)到所述映射表中;

      根據(jù)全局管理對(duì)象的加載方式和加載路徑,在裝載器中加載所述壓縮包,并將其傳送給JS解析引擎;

      通過JS解析引擎將所述動(dòng)態(tài)布局程序解析并轉(zhuǎn)換為內(nèi)存對(duì)象,并通過所述映射表將所述內(nèi)存對(duì)象映射為本地對(duì)象。

      可選地,所述方法還包括:

      檢測(cè)標(biāo)志位判斷所述動(dòng)態(tài)布局程序是否需要更新;

      當(dāng)判斷所述動(dòng)態(tài)布局程序需要更新時(shí),獲取服務(wù)器中的第二動(dòng)態(tài)布局程序?qū)?yīng)的第二壓縮包,并將所述第二壓縮包進(jìn)行解析、轉(zhuǎn)換并渲染。

      可選地,所述當(dāng)判斷所述動(dòng)態(tài)布局程序需要更新時(shí),獲取服務(wù)器中的第二動(dòng)態(tài)布局程序?qū)?yīng)的第二壓縮包,并將所述第二壓縮包進(jìn)行解析、轉(zhuǎn)換并渲染的步驟包括:

      當(dāng)判斷所述動(dòng)態(tài)布局程序需要更新時(shí),判斷服務(wù)器中是否存在第二動(dòng)態(tài)布局程序?qū)?yīng)的第二壓縮包;

      當(dāng)服務(wù)器中存在所述第二壓縮包時(shí),獲取所述第二壓縮包,并將所述第二壓縮包進(jìn)行解析、轉(zhuǎn)換并渲染。

      此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種移動(dòng)應(yīng)用動(dòng)態(tài)布局的系統(tǒng),所述系統(tǒng)包括:

      第一獲取模塊,用于獲取服務(wù)器中動(dòng)態(tài)布局程序的壓縮包,并將所述壓縮包加載到本地,其中,所述動(dòng)態(tài)布局程序使用JS腳本語言編寫;

      解析模塊,用于通過JS解析引擎將所述壓縮包解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后將所述內(nèi)存對(duì)象映射為本地對(duì)象;

      渲染模塊,用于將所述本地對(duì)象掛載到控件模塊中進(jìn)行渲染使其在界面中顯示。

      可選地,所述系統(tǒng)還包括:

      上傳模塊,用于當(dāng)接收到外界發(fā)送的使用JS腳本語言編寫的動(dòng)態(tài)布局程序所對(duì)應(yīng)的壓縮包,將其上傳至服務(wù)器。

      可選地,所述解析模塊包括:

      初始化單元,用于初始化全局管理對(duì)象以及控件模塊,通過全局管理對(duì)象創(chuàng)建映射表,并將控件模塊注冊(cè)到所述映射表中;

      加載單元,用于根據(jù)全局管理對(duì)象的加載方式和加載路徑,在裝載器中加載所述壓縮包,并將其傳送給JS解析引擎;

      轉(zhuǎn)換單元,用于通過JS解析引擎將所述動(dòng)態(tài)布局程序解析并轉(zhuǎn)換為內(nèi)存對(duì)象,并通過所述映射表將所述內(nèi)存對(duì)象映射為本地對(duì)象。

      可選地,所述系統(tǒng)還包括:

      判斷模塊,用于檢測(cè)標(biāo)志位判斷所述動(dòng)態(tài)布局程序是否需要更新;

      第二獲取模塊,用于當(dāng)判斷所述動(dòng)態(tài)布局程序需要更新時(shí),獲取服務(wù)器中的第二動(dòng)態(tài)布局程序?qū)?yīng)的第二壓縮包,并將所述第二壓縮包進(jìn)行解析、轉(zhuǎn)換并渲染。

      可選地,所述第二獲取模塊包括:

      判斷單元,用于當(dāng)判斷所述動(dòng)態(tài)布局程序需要更新時(shí),判斷服務(wù)器中是否存在第二動(dòng)態(tài)布局程序?qū)?yīng)的第二壓縮包;

      轉(zhuǎn)換單元,當(dāng)服務(wù)器中存在所述第二壓縮包時(shí),獲取所述第二壓縮包,并將所述第二壓縮包進(jìn)行解析、轉(zhuǎn)換并渲染。

      本發(fā)明提供一種移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法,所述方法通過獲取服務(wù)器中動(dòng)態(tài)布局程序的壓縮包,并將所述壓縮包加載到本地,其中,所述動(dòng)態(tài)布局程序使用JS腳本語言編寫;通過JS解析引擎將所述壓縮包解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后將所述內(nèi)存對(duì)象映射為本地對(duì)象;將所述本地對(duì)象掛載到控件模塊中進(jìn)行渲染使其在界面中顯示。本發(fā)明通過使用通用的JS腳本編程語言編寫動(dòng)態(tài)布局程序,然后通過JS解析引擎將所述動(dòng)態(tài)布局程序解析轉(zhuǎn)換為本地對(duì)象,以實(shí)現(xiàn)應(yīng)用程序的動(dòng)態(tài)布局本地化。由于JS腳本語言編寫的程序可以上傳對(duì)應(yīng)的壓縮包到服務(wù)器然后下發(fā)到客戶端進(jìn)行升級(jí),因此,本發(fā)明可以通過下載壓縮包實(shí)現(xiàn)熱更新。通過上述方式,本發(fā)明在保證用戶體驗(yàn)的同時(shí)能夠?qū)崿F(xiàn)熱更新,并且采用通用的JS腳本編程語言編寫,便于擴(kuò)展和推廣。

      附圖說明

      圖1為本發(fā)明移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法第一實(shí)施例的流程示意圖;

      圖2為本發(fā)明移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法第二實(shí)施例的流程示意圖;

      圖3為本發(fā)明移動(dòng)應(yīng)用動(dòng)態(tài)布局的系統(tǒng)第一實(shí)施例的功能模塊示意圖;

      圖4為本發(fā)明移動(dòng)應(yīng)用動(dòng)態(tài)布局的系統(tǒng)第二實(shí)施例的功能模塊示意圖;

      圖5為本發(fā)明移動(dòng)應(yīng)用動(dòng)態(tài)布局的系統(tǒng)的框架圖;

      圖6為JS橋與Java橋通信的時(shí)序圖;

      圖7為本地化模塊結(jié)構(gòu)圖;

      圖8為應(yīng)用加載動(dòng)態(tài)布局的流程;

      圖9為應(yīng)用熱更新的流程圖。

      本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。

      具體實(shí)施方式

      應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

      本發(fā)明提供一種移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法。

      參照?qǐng)D1,圖1為本發(fā)明移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法第一實(shí)施例的流程示意圖。

      本實(shí)施例中,該方法包括:

      步驟S10,獲取服務(wù)器中動(dòng)態(tài)布局程序的壓縮包,并將所述壓縮包加載到本地,其中,所述動(dòng)態(tài)布局程序使用JS腳本語言編寫。

      具體地,本實(shí)施中選取JS腳本語言為例進(jìn)行說明。當(dāng)檢測(cè)到根據(jù)用戶操作觸發(fā)的加載動(dòng)態(tài)布局程序指令時(shí),從服務(wù)器中獲取動(dòng)態(tài)布局程序的壓縮包,并將該壓縮包加載到移動(dòng)平臺(tái)中。

      在本步驟之前通過開發(fā)者開發(fā)層實(shí)現(xiàn)動(dòng)態(tài)布局程序的編寫。

      在步驟S10之前還包括:

      步驟S01,當(dāng)接收到外界發(fā)送的使用JS腳本語言編寫的動(dòng)態(tài)布局程序所對(duì)應(yīng)的壓縮包,將其上傳至服務(wù)器。

      具體地,當(dāng)接收到外界發(fā)送的使用JS腳本語言編寫的動(dòng)態(tài)程序?qū)?yīng)的壓縮包時(shí),將所述壓縮包上傳至服務(wù)器上進(jìn)行存儲(chǔ)。由于JS腳本語言具有放在服務(wù)器上然后到下發(fā)到客戶端的特性,就像網(wǎng)頁支持熱更新一樣,所以,我們的系統(tǒng)就支持熱更新。

      步驟S20,通過JS解析引擎將所述壓縮包解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后將所述內(nèi)存對(duì)象映射為本地對(duì)象。

      具體地,應(yīng)用將所述壓縮包加載到本地后,通過JS解析引擎將所述壓縮包由磁盤解析到內(nèi)存中,并將其轉(zhuǎn)換為內(nèi)存對(duì)象。獲取所述內(nèi)存對(duì)象后,JS橋和JAVA橋會(huì)根據(jù)預(yù)存的映射表將所述內(nèi)存對(duì)象映射為本地對(duì)象。

      步驟S30,將所述本地對(duì)象掛載到控件模塊中進(jìn)行渲染使其在界面中顯示。

      具體地,在將所述內(nèi)存對(duì)象映射為本地對(duì)象后,進(jìn)一步將所述對(duì)象掛載到控件模塊中,將程序中的本地對(duì)象渲染成可在界面顯示的本地對(duì)象。

      本發(fā)明提供一種移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法,所述方法通過獲取服務(wù)器中動(dòng)態(tài)布局程序的壓縮包,并將所述壓縮包加載到本地,其中,所述動(dòng)態(tài)布局程序使用JS腳本語言編寫;通過JS解析引擎將所述壓縮包解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后將所述內(nèi)存對(duì)象映射為本地對(duì)象;將所述本地對(duì)象掛載到控件模塊中進(jìn)行渲染使其在界面中顯示。本發(fā)明通過使用通用的JS腳本編程語言編寫動(dòng)態(tài)布局程序,然后通過JS解析引擎將所述動(dòng)態(tài)布局程序解析轉(zhuǎn)換為本地對(duì)象,以實(shí)現(xiàn)應(yīng)用程序的動(dòng)態(tài)布局本地化。由于JS腳本語言編寫的程序可以上傳對(duì)應(yīng)的壓縮包到服務(wù)器然后下發(fā)到客戶端進(jìn)行升級(jí),因此,本發(fā)明可以通過下載壓縮包實(shí)現(xiàn)熱更新。通過上述方式,本發(fā)明在保證用戶體驗(yàn)的同時(shí)能夠?qū)崿F(xiàn)熱更新,并且采用通用的JS腳本編程語言編寫,便于擴(kuò)展和推廣。

      為了進(jìn)一步說明從用戶啟動(dòng)應(yīng)用開始來加載本系統(tǒng)的流程,如圖8所示,步驟S20包括:

      步驟S21,初始化全局管理對(duì)象以及控件模塊,通過全局管理對(duì)象創(chuàng)建映射表,并將控件模塊注冊(cè)到所述映射表中;

      具體地,初始化全局管理對(duì)象,啟動(dòng)應(yīng)用的第一個(gè)流程是初始化全局管理對(duì)象。把必要的全局設(shè)置進(jìn)行初始化,是為后續(xù)流程提供應(yīng)用配置。初始化根UI控件模塊,是要渲染視覺元素,首先將根元素進(jìn)行初始化,然后在根元素上掛載子元素。同時(shí)初始化核心框架模塊,初始化框架的核心框架模塊包塊層次管理等。

      步驟S22,根據(jù)全局管理對(duì)象的加載方式和加載路徑,在裝載器中加載所述壓縮包,并將其傳送給JS解析引擎;

      具體地,全局管理對(duì)象創(chuàng)建Java模塊注冊(cè)表、JS模塊注冊(cè)表。只有先把各個(gè)控件模塊注冊(cè)到這兩個(gè)映射表中,才能夠解析后面JS腳本加載進(jìn)來的對(duì)象。裝載器加載JS壓縮包、并傳給JS解析引擎。裝載器根據(jù)全局管理對(duì)象的加載方式,加載路徑去請(qǐng)求或者加載JS壓縮包,并傳遞給解析引擎。

      步驟S23,通過JS解析引擎將所述動(dòng)態(tài)布局程序解析并轉(zhuǎn)換為內(nèi)存對(duì)象,并通過所述映射表將所述內(nèi)存對(duì)象映射為本地對(duì)象。

      具體地,通過解析引擎將所述動(dòng)態(tài)布局程序解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后通過Java和JS橋?qū)?nèi)存對(duì)象映射為本地對(duì)象,然后掛載到根UI控件進(jìn)行渲染。

      參照?qǐng)D2,圖2為本發(fā)明移動(dòng)應(yīng)用動(dòng)態(tài)布局的方法第二實(shí)施例的流程示意圖。

      為了使客戶端應(yīng)用需要發(fā)布新版本時(shí),不需要通過應(yīng)用市場(chǎng)讓用戶去更新應(yīng)用,而是通過熱更新達(dá)到目的。所述方法還包括:

      步驟S40,檢測(cè)標(biāo)志位判斷所述動(dòng)態(tài)布局程序是否需要更新。

      具體地,當(dāng)接收到根據(jù)用戶操作所觸發(fā)的更新指令時(shí),通過檢測(cè)應(yīng)用的標(biāo)志位進(jìn)行判斷,所述動(dòng)態(tài)程序是否需要更新。

      步驟S50,當(dāng)判斷所述動(dòng)態(tài)布局程序需要更新時(shí),獲取服務(wù)器中的第二動(dòng)態(tài)布局程序?qū)?yīng)的第二壓縮包,并將所述第二壓縮包進(jìn)行解析、轉(zhuǎn)換并渲染。

      具體地,當(dāng)檢測(cè)到更新所述動(dòng)態(tài)布局程序的指令時(shí),獲取服務(wù)器中更新后的動(dòng)態(tài)布局程序所對(duì)應(yīng)的JS第二壓縮包,并下載所述JS第二壓縮包,將所述壓縮包按照應(yīng)用加載動(dòng)態(tài)布局程序的流程,進(jìn)行解析、轉(zhuǎn)換及渲染。

      如圖9所示,步驟S50包括:

      步驟S51,當(dāng)判斷所述動(dòng)態(tài)布局程序需要更新時(shí),判斷服務(wù)器中是否存在第二動(dòng)態(tài)布局程序?qū)?yīng)的第二壓縮包;

      具體地,程序啟動(dòng)時(shí)判斷是否需要遠(yuǎn)程加載JS第二壓縮包,即判斷是否需要加載更新后的JS第二壓縮包。若判斷需要加載更新后的JS第二壓縮包,進(jìn)一步向服務(wù)器確認(rèn)是否存在更新的JS第二壓縮包。

      步驟S52,當(dāng)服務(wù)器中存在所述第二壓縮包時(shí),獲取所述第二壓縮包,并將所述第二壓縮包進(jìn)行解析、轉(zhuǎn)換并渲染。

      具體地,當(dāng)服務(wù)器存在更新的JS第二壓縮包時(shí),下載所述JS第二壓縮包,將其加載到本地并傳送至JS解析引擎。先把壓縮包解壓縮,然后加載進(jìn)JS解析引擎進(jìn)行解析,映射及渲染。

      通過判斷是否需要更新然后再?zèng)Q定下載,同時(shí)能減少數(shù)據(jù)傳輸,加快應(yīng)用程序的啟動(dòng)速度和布局顯示速度。

      本發(fā)明進(jìn)一步提供一種移動(dòng)應(yīng)用動(dòng)態(tài)布局的系統(tǒng)。

      參照?qǐng)D3,圖3為本發(fā)明移動(dòng)應(yīng)用動(dòng)態(tài)布局的系統(tǒng)第一實(shí)施例的功能模塊示意圖。

      本實(shí)施例中,該系統(tǒng)包括:

      第一獲取模塊10,用于獲取服務(wù)器中動(dòng)態(tài)布局程序的壓縮包,并將所述壓縮包加載到本地,其中,所述動(dòng)態(tài)布局程序使用JS腳本語言編寫;

      具體地,具體地,本實(shí)施中選取JS腳本語言為例進(jìn)行說明。當(dāng)檢測(cè)到根據(jù)用戶操作觸發(fā)的加載動(dòng)態(tài)布局程序指令時(shí),從服務(wù)器中獲取動(dòng)態(tài)布局程序的壓縮包,并將該壓縮包加載到移動(dòng)平臺(tái)中。

      在本步驟之前通過開發(fā)者開發(fā)層實(shí)現(xiàn)動(dòng)態(tài)布局程序的編寫。

      該系統(tǒng)還包括:

      上傳模塊01,用于當(dāng)接收到外界發(fā)送的使用JS腳本語言編寫的動(dòng)態(tài)布局程序所對(duì)應(yīng)的壓縮包,將其上傳至服務(wù)器。

      具體地,當(dāng)接收到外界發(fā)送的使用JS腳本語言編寫的動(dòng)態(tài)程序?qū)?yīng)的壓縮包時(shí),將所述壓縮包上傳至服務(wù)器上進(jìn)行存儲(chǔ)。由于JS腳本語言具有放在服務(wù)器上然后到下發(fā)到客戶端的特性,就像網(wǎng)頁支持熱更新一樣,所以,我們的系統(tǒng)就支持熱更新。

      解析模塊20,用于通過JS解析引擎將所述壓縮包解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后將所述內(nèi)存對(duì)象映射為本地對(duì)象;

      具體地,應(yīng)用將所述壓縮包加載到本地后,通過JS解析引擎將所述壓縮包由磁盤解析到內(nèi)存中,并將其轉(zhuǎn)換為內(nèi)存對(duì)象。獲取所述內(nèi)存對(duì)象后,JS橋和JAVA橋會(huì)根據(jù)預(yù)存的映射表將所述內(nèi)存對(duì)象映射為本地對(duì)象。

      渲染模塊30,用于將所述本地對(duì)象掛載到控件模塊中進(jìn)行渲染使其在界面中顯示。

      具體地,在將所述內(nèi)存對(duì)象映射為本地對(duì)象后,進(jìn)一步將所述對(duì)象掛載到控件模塊中,將程序中的本地對(duì)象渲染成可在界面顯示的本地對(duì)象。

      本實(shí)施例提供一種移動(dòng)應(yīng)用動(dòng)態(tài)布局的系統(tǒng),所述系統(tǒng)通過獲取服務(wù)器中動(dòng)態(tài)布局程序的壓縮包,并將所述壓縮包加載到本地,其中,所述動(dòng)態(tài)布局程序使用JS腳本語言編寫;通過JS解析引擎將所述壓縮包解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后將所述內(nèi)存對(duì)象映射為本地對(duì)象;將所述本地對(duì)象掛載到控件模塊中進(jìn)行渲染使其在界面中顯示。本發(fā)明通過使用通用的JS腳本編程語言編寫動(dòng)態(tài)布局程序,然后通過JS解析引擎將所述動(dòng)態(tài)布局程序解析轉(zhuǎn)換為本地對(duì)象,以實(shí)現(xiàn)應(yīng)用程序的動(dòng)態(tài)布局本地化。由于JS腳本語言編寫的程序可以上傳對(duì)應(yīng)的壓縮包到服務(wù)器然后下發(fā)到客戶端進(jìn)行升級(jí),因此,本發(fā)明可以通過下載壓縮包實(shí)現(xiàn)熱更新。通過上述方式,本發(fā)明在保證用戶體驗(yàn)的同時(shí)能夠?qū)崿F(xiàn)熱更新,并且采用通用的JS腳本編程語言編寫,便于擴(kuò)展和推廣。

      為了進(jìn)一步說明從用戶啟動(dòng)應(yīng)用開始來加載本系統(tǒng)的流程,解析模塊20包括:

      初始化單元21,用于初始化全局管理對(duì)象以及控件模塊,通過全局管理對(duì)象創(chuàng)建映射表,并將控件模塊注冊(cè)到所述映射表中;

      具體地,初始化全局管理對(duì)象,啟動(dòng)應(yīng)用的第一個(gè)流程是初始化全局管理對(duì)象。把必要的全局設(shè)置進(jìn)行初始化,是為后續(xù)流程提供應(yīng)用配置。初始化根UI控件模塊,是要渲染視覺元素,首先將根元素進(jìn)行初始化,然后在根元素上掛載子元素。同時(shí)初始化核心框架模塊,初始化框架的核心框架模塊包塊層次管理等。

      加載單元22,用于根據(jù)全局管理對(duì)象的加載方式和加載路徑,在裝載器中加載所述壓縮包,并將其傳送給JS解析引擎;

      具體地,全局管理對(duì)象創(chuàng)建Java模塊注冊(cè)表、JS模塊注冊(cè)表。只有先把各個(gè)控件模塊注冊(cè)到這兩個(gè)映射表中,才能夠解析后面JS腳本加載進(jìn)來的對(duì)象。裝載器加載JS壓縮包、并傳給JS解析引擎。裝載器根據(jù)全局管理對(duì)象的加載方式,加載路徑去請(qǐng)求或者加載JS壓縮包,并傳遞給解析引擎。

      轉(zhuǎn)換單元23,用于通過JS解析引擎將所述動(dòng)態(tài)布局程序解析并轉(zhuǎn)換為內(nèi)存對(duì)象,并通過所述映射表將所述內(nèi)存對(duì)象映射為本地對(duì)象。

      具體地,通過解析引擎將所述動(dòng)態(tài)布局程序解析并轉(zhuǎn)換為內(nèi)存對(duì)象,然后通過Java和JS橋?qū)?nèi)存對(duì)象映射為本地對(duì)象,然后掛載到根UI控件進(jìn)行渲染。

      參照?qǐng)D4,圖4為本發(fā)明移動(dòng)應(yīng)用動(dòng)態(tài)布局的系統(tǒng)第二實(shí)施例的功能模塊示意圖;

      為了使客戶端應(yīng)用需要發(fā)布新版本時(shí),不需要通過應(yīng)用市場(chǎng)讓用戶去更新應(yīng)用,而是通過熱更新達(dá)到目的。該系統(tǒng)還包括:

      判斷模塊40,用于檢測(cè)標(biāo)志位判斷所述動(dòng)態(tài)布局程序是否需要更新;

      具體地,當(dāng)接收到根據(jù)用戶操作所觸發(fā)的更新指令時(shí),通過檢測(cè)應(yīng)用的標(biāo)志位進(jìn)行判斷,所述動(dòng)態(tài)程序是否需要更新。

      第二獲取模塊50,用于當(dāng)判斷所述動(dòng)態(tài)布局程序需要更新時(shí),獲取服務(wù)器中的第二動(dòng)態(tài)布局程序?qū)?yīng)的第二壓縮包,并將所述第二壓縮包進(jìn)行解析、轉(zhuǎn)換并渲染。

      具體地,當(dāng)檢測(cè)到更新所述動(dòng)態(tài)布局程序的指令時(shí),獲取服務(wù)器中更新后的動(dòng)態(tài)布局程序所對(duì)應(yīng)的JS第二壓縮包,并下載所述JS第二壓縮包,將所述壓縮包按照應(yīng)用加載動(dòng)態(tài)布局程序的流程,進(jìn)行解析、轉(zhuǎn)換及渲染。

      所述第二獲取模塊50包括:

      判斷單元51,用于當(dāng)判斷所述動(dòng)態(tài)布局程序需要更新時(shí),判斷服務(wù)器中是否存在第二動(dòng)態(tài)布局程序?qū)?yīng)的第二壓縮包;

      具體地,程序啟動(dòng)時(shí)判斷是否需要遠(yuǎn)程加載JS第二壓縮包,即判斷是否需要加載更新后的JS第二壓縮包。若判斷需要加載更新后的JS第二壓縮包,進(jìn)一步向服務(wù)器確認(rèn)是否存在更新的JS第二壓縮包。

      轉(zhuǎn)換單元52,用于當(dāng)服務(wù)器中存在所述第二壓縮包時(shí),獲取所述第二壓縮包,并將所述第二壓縮包進(jìn)行解析、轉(zhuǎn)換并渲染。

      具體地,當(dāng)服務(wù)器存在更新的JS第二壓縮包時(shí),下載所述JS第二壓縮包,將其加載到本地并傳送至JS解析引擎。先把壓縮包解壓縮,然后加載進(jìn)JS解析引擎進(jìn)行解析,映射及渲染。

      通過判斷是否需要更新然后再?zèng)Q定下載,同時(shí)能減少數(shù)據(jù)傳輸,加快應(yīng)用程序的啟動(dòng)速度和布局顯示速度。

      如圖5所示,本系統(tǒng)包含三個(gè)層次:動(dòng)態(tài)布局開發(fā)層(JS層)、解析引擎層(C++層)、本地化層(Java層)。

      層次具體功能如下:

      1)JS層:JS層是開發(fā)者開發(fā)層,用于實(shí)現(xiàn)產(chǎn)品功能的主要層面。它包含UI(User Interface,用戶交互)布局、組件、生命周期管理。在開發(fā)的時(shí)候,布局主要是通過CSS(Cascading Style Sheets,層疊樣式表)加上JS來實(shí)現(xiàn),而在JS需要定義所需組件,以及進(jìn)行生命周期的管理。

      2)C++層:這一層是封裝了JS解析引擎。JS引擎加載JS文件,將腳本文件解析成需要渲染的對(duì)象,然后通過Jni接口傳遞給Java層使用。

      3)Java層:這一層是實(shí)現(xiàn)本地化渲染的層次。它包含原生布局、橋接器、工具庫、模塊。原生布局是我們最終需要生成的結(jié)果;橋接器是實(shí)現(xiàn)映射的關(guān)鍵、工具庫則包含圖片庫、Http庫等工具庫,實(shí)現(xiàn)網(wǎng)絡(luò)圖片加載和Http的請(qǐng)求、模塊則是平臺(tái)本地化模塊,例如對(duì)話框、視圖、列表、輸入框、文本等。

      通過上述三層,實(shí)現(xiàn)JS腳本編寫程序就能夠生成本地化布局。

      為了能夠?qū)S動(dòng)態(tài)布局的事件轉(zhuǎn)化為本地布局的事件。以下詳細(xì)說明從JS程序解析成移動(dòng)平臺(tái)本地程序的具體流程。

      首先從JS層然后通過JS橋和Java橋映射到Java層,回調(diào)過程則反過來。JS橋和Java橋是類似于注冊(cè)表的兩個(gè)模塊,JS橋完成JS調(diào)用及回調(diào)側(cè)的注冊(cè);Java橋則實(shí)現(xiàn)Java層模塊映射和注冊(cè)及回調(diào)的注冊(cè)。

      如圖6所示的是JS與Java通信的時(shí)序圖,具體步驟如下:

      Step1:JS模塊對(duì)象調(diào)用方法。例如用戶點(diǎn)擊應(yīng)用的一個(gè)按鈕,這個(gè)按鈕是JS的模塊對(duì)象,點(diǎn)擊觸發(fā)了點(diǎn)擊事件,進(jìn)而導(dǎo)致點(diǎn)擊監(jiān)聽方法的調(diào)用,該方法的調(diào)用會(huì)傳遞到JS橋;

      Step2:JS橋獲取{moduleId,methodId,args},即{模塊標(biāo)識(shí),方法標(biāo)識(shí),參數(shù)列表}。這里面的具體工作是JS解析引擎加載JS腳本,解析JS腳本,然后構(gòu)建好映射表,當(dāng)用戶觸發(fā)的時(shí)候會(huì)由JS傳遞{moduleId,methodId,args}參數(shù)到JS橋,JS橋通過JS橋的注冊(cè)表知道其含義;

      Step3:注冊(cè)回調(diào)CallbackId(回調(diào)標(biāo)識(shí))。注冊(cè)回調(diào)方法,以CallbackId去標(biāo)示它。回調(diào)是當(dāng)調(diào)用逆向返回的時(shí)候進(jìn)行調(diào)用,用于處理調(diào)用結(jié)果的一個(gè)方法。

      Step4:發(fā)送{moduleId,methodId,callbackId,args},即{模塊標(biāo)識(shí),方法標(biāo)識(shí),回調(diào)標(biāo)識(shí),參數(shù)列表}到Java橋;

      Step5:Java橋收到后進(jìn)行解析及映射。通過查找Java橋的注冊(cè)表進(jìn)行解析和映射。例如對(duì)話框模塊、文本模塊、列表模塊、自定義組件模塊等。

      Step6:創(chuàng)建回調(diào)Block(塊)。Java橋的回調(diào)塊里面可以設(shè)置JS橋側(cè)的回調(diào)方法以及額外的一些方法。

      Step7:調(diào)用本地方法。例如解析到的是對(duì)話框彈窗,那么在這一步則調(diào)用對(duì)話框的顯示方法進(jìn)行顯示;

      Step8:調(diào)用Block回調(diào)方法。本地方法執(zhí)行完畢后,進(jìn)行逆向回調(diào)處理。首先調(diào)用Java橋的Block回調(diào)方法。

      Step9:Java橋回調(diào)CallbackId對(duì)應(yīng)的方法。

      Step10:JS橋回調(diào)JS回調(diào)方法。

      至此,JS到Java的調(diào)用流程以及從Java回調(diào)到JS的流程結(jié)束。

      如圖7所示,實(shí)現(xiàn)JS動(dòng)態(tài)布局的事件轉(zhuǎn)化為本地布局的事件的本地化模塊包含如下模塊:

      解析渲染引擎:解析渲染引擎是指JS的解析引擎,它支持各個(gè)版本的JS解析,是一個(gè)采用C++編寫的本地庫。之所以采用C++實(shí)現(xiàn)是為了提高其解析效率,解析渲染引擎完成了從JS腳本到內(nèi)存對(duì)象的轉(zhuǎn)換;而Java層又通過Jni(Java Native Interface,Java本地化接口)接口來進(jìn)行獲取和通信。

      全局管理對(duì)象:全局管理對(duì)象實(shí)現(xiàn)一些需要應(yīng)用全局屬性的管理,例如腳本加載方式、腳本加載路徑、是否調(diào)試等。

      Java層模塊注冊(cè)表:Java層模塊注冊(cè)表包含平臺(tái)系統(tǒng)控件的注冊(cè)以及自定義控件的注冊(cè)。新開發(fā)一個(gè)本地化組件的時(shí)候,需要按照注冊(cè)模塊的流程注冊(cè)該自定義組件,而系統(tǒng)組件則不需要。

      核心框架模塊:這個(gè)模塊是完成諸如初始化、核心流程、層次管理等工作的一個(gè)模塊。

      根UI控件:所有的應(yīng)用控件都來自于應(yīng)用的根UI控件,依照樹形關(guān)系進(jìn)行連接。所以根UI控件是根節(jié)點(diǎn),是所有視覺元素的祖先。

      JS層模塊注冊(cè)表:JS層模塊注冊(cè)表是注冊(cè)JS模塊、方法的一個(gè)表,用于登記JS組件和方法的模塊。通過JS模塊注冊(cè)表和Java模塊注冊(cè)表兩個(gè)映射,來實(shí)現(xiàn)模塊和方法的解析映射。

      通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例的方法。

      以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1