本申請涉及移動終端技術(shù)領(lǐng)域,尤其涉及一種客戶端的初始化方法及裝置。
背景技術(shù):
一般地,對客戶端進行初始化時需要利用預(yù)置數(shù)據(jù)。其中,預(yù)置數(shù)據(jù)是指客戶端在初始化時所需要的一些通用數(shù)據(jù),比如用于生成客戶端界面的數(shù)據(jù)、用于生成所述界面上設(shè)置的控件的數(shù)據(jù),等等。客戶端根據(jù)預(yù)置數(shù)據(jù),能夠完成包括構(gòu)建界面等在內(nèi)的初始化操作。
現(xiàn)有技術(shù)中,服務(wù)器向用戶終端提供預(yù)置數(shù)據(jù)的方式,主要包括:將一部分預(yù)置數(shù)據(jù)(主要是結(jié)構(gòu)相對比較簡單的數(shù)據(jù))以字符串的形式,寫入到客戶端的安裝包中的源代碼中——比如以安卓應(yīng)用安裝包(androidapplicationpackage,apk)為例,現(xiàn)有技術(shù)中會將具備鍵值對(key-value,kv)結(jié)構(gòu)的預(yù)置數(shù)據(jù)寫入到apk中的源碼資源文件classes.dex中。
除上述一部分預(yù)置數(shù)據(jù)外,用戶終端在執(zhí)行對客戶端的初始化時,會從客戶端的服務(wù)器下載另一部分預(yù)置數(shù)據(jù)(主要是結(jié)構(gòu)相對復(fù)雜的數(shù)據(jù),如圖片數(shù)據(jù)等非結(jié)構(gòu)化數(shù)據(jù)),從而基于該部分預(yù)置數(shù)據(jù)和寫入到所述源代碼中的預(yù)置數(shù)據(jù),實現(xiàn)對于客戶端的初始化。
上述方案存在的缺陷在于,用戶終端在接收到針對客戶端的初始化指令后,需要花費較長時間,才能從客戶端的服務(wù)器處下載到除結(jié)構(gòu)相對比較簡單的數(shù)據(jù)外的、其他所有的初始化客戶端所需的預(yù)置數(shù)據(jù),從而導(dǎo)致客戶端初始化過程耗費較長時間,效率較低。
技術(shù)實現(xiàn)要素:
本申請實施例提供一種客戶端的初始化方法,用以解決現(xiàn)有技術(shù)存在的客戶端初始化過程耗時較長、效率較低的問題。
本申請實施例還提供一種客戶端的初始化裝置,用以解決現(xiàn)有技術(shù)存在的客戶端初始化過程耗時較長、效率較低的問題。
本申請實施例采用下述技術(shù)方案:
一種客戶端的初始化方法,包括:
接收針對客戶端的初始化指令;響應(yīng)于所述初始化指令,從所述客戶端的安裝包中的資源文件中,獲取設(shè)置在所述資源文件中的、初始化所述客戶端所需的預(yù)置數(shù)據(jù);其中,設(shè)置在所述資源文件中的預(yù)置數(shù)據(jù),包括:對具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或,具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù);根據(jù)獲取的預(yù)置數(shù)據(jù),進行所述客戶端的初始化。
一種客戶端的初始化裝置,包括:
初始化指令接收單元,用于接收針對客戶端的初始化指令;預(yù)置數(shù)據(jù)獲取單元,用于響應(yīng)于所述初始化指令,從所述客戶端的安裝包中的資源文件中,獲取設(shè)置在所述資源文件中的、初始化所述客戶端所需的預(yù)置數(shù)據(jù);其中,設(shè)置在所述資源文件中的預(yù)置數(shù)據(jù),包括:對具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或,具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù);初始化單元,用于根據(jù)獲取的預(yù)置數(shù)據(jù),進行所述客戶端的初始化。
本申請實施例采用的上述至少一個技術(shù)方案能夠達到以下有益效果:
由于可以將對具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù)設(shè)置在安裝包中,因此在初始化指令的觸發(fā)下,可以直接從該安裝包中獲取到具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù) 置數(shù)據(jù),和/或具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù),無需從服務(wù)器獲取具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù),因此節(jié)約了客戶端初始化過程所耗費的時間,提高了該過程的效率。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1為本申請實施例提供的一種客戶端的初始化方法的具體實現(xiàn)流程示意圖;
圖2為本申請實施例提供的一種預(yù)置數(shù)據(jù)的獲取方法的具體實現(xiàn)流程示意圖;
圖3為本申請實施例提供的一種客戶端的初始化裝置的具體結(jié)構(gòu)示意圖。
具體實施方式
為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本申請具體實施例及相應(yīng)的附圖對本申請技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
以下結(jié)合附圖,詳細(xì)說明本申請各實施例提供的技術(shù)方案。
實施例1
本申請實施例提供一種客戶端的初始化方法,用以解決現(xiàn)有技術(shù)存在的客戶端初始化過程耗時較長、效率較低的問題。該方法的執(zhí)行主體,比如可以是手機、平板電腦、智能手表等等可安裝客戶端的用戶終端。該方法的具體實現(xiàn) 流程示意圖如圖1所示,主要包括下述步驟:
步驟11,用戶終端接收針對客戶端的初始化指令;
一般地,用戶終端可能在下述三種情況下接收到初始化指令:
情況1:在客戶端首次運行時;
在客戶端首次運行時,觸發(fā)客戶端運行的指令,即為針對客戶端的初始化指令。
情況2:當(dāng)客戶端的持久化到用戶終端本地的預(yù)置數(shù)據(jù)被清除后,再次運行客戶端時;
在客戶端的預(yù)置數(shù)據(jù)被清除后,再次運行客戶端時,客戶端往往需要進行初始化。從而在客戶端的預(yù)置數(shù)據(jù)被清除后,用戶終端所接收到的第一個用于觸發(fā)客戶端運行的指令,也是針對客戶端的初始化指令。
需要說明的是,所述持久化,是實現(xiàn)數(shù)據(jù)在持久狀態(tài)和瞬時狀態(tài)間轉(zhuǎn)換的一種機制。通俗的講,就是瞬時數(shù)據(jù)(比如內(nèi)存中的數(shù)據(jù),是不能永久保存的)持久化為持久數(shù)據(jù)(比如持久化至數(shù)據(jù)庫中,能夠長久保存)。
情況3:當(dāng)客戶端進行版本更新重裝后,再次運行客戶端時。
在客戶端進行版本更新重裝后,再次運行客戶端,相當(dāng)于首次運行該更新后版本的客戶端,即在客戶端進行版本更新重裝后,再次啟動客戶端時,用于觸發(fā)客戶端啟動的運行指令即初始化指令。
步驟12,用戶終端響應(yīng)于針對客戶端的初始化指令,從所述客戶端的安裝包中的資源文件中,獲取設(shè)置在資源文件中的、初始化所述客戶端所需的預(yù)置數(shù)據(jù);
其中,設(shè)置在所述資源文件中的預(yù)置數(shù)據(jù),包括:對具備非kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),以及具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù)中的至少一種。
本申請實施例中,具備非kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),比如可以包括結(jié)構(gòu)化的預(yù)置數(shù)據(jù);而具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù),比如可以 包括圖片數(shù)據(jù)、音頻數(shù)據(jù)或視頻數(shù)據(jù)等非結(jié)構(gòu)化的預(yù)置數(shù)據(jù)。
本申請實施例中,所述客戶端的安裝包,比如可以是保存在本地的安裝包。以所述安裝包為apk為例,apk的后綴名為.apk,但apk其實就是一個zip格式的文件,其中往往會包含應(yīng)用的二進制代碼、資源、配置文件等。具體而言,apk中的文件目錄一般包括:assets(額外資源文件目錄)、lib(附加組件目錄)、meta-inf(證書文件目錄)、res(資源文件目錄)、androidmanifest.xml(全局配置文件目錄)、classes.dex(源碼資源文件目錄)和resources.arsc(二進制資源文件目錄)。
其中,assets下的文件,包括額外資源文件和配置文件;lib下的文件,包括so文件,例如libnative-audio-jni.so文件等;meta-inf下的文件,包括簽名后的證書,比如cert.rsa(簽名文件的一種)、cert.sf(簽名文件的一種)和manifest.mf(簽名文件的一種)等;res下的文件,包括圖片文件和界面的布局文件等;classes.dex下的文件,一般是java源碼編譯后生成的java字節(jié)碼文件,有些軟件的選項和說明內(nèi)容的文字會在這個文件里;resources.arsc下的文件,一般是經(jīng)過編譯后的資源文件。
考慮到apk包含的不同資源文件,可以用于保存具有不同結(jié)構(gòu)的數(shù)據(jù)——比如,res下的raw文件,可以用于保存結(jié)構(gòu)相對比較簡單的數(shù)據(jù),如結(jié)構(gòu)化數(shù)據(jù)和具備kv結(jié)構(gòu)的數(shù)據(jù);assets下的logo文件,可以用于保存結(jié)構(gòu)相對比較復(fù)雜的數(shù)據(jù),比如圖片數(shù)據(jù)等非結(jié)構(gòu)化數(shù)據(jù);等等——因此本申請實施例中,服務(wù)器可以將不同結(jié)構(gòu)的預(yù)置數(shù)據(jù)設(shè)置到apk包含的文件中,以便后續(xù)從文件中讀取具備不同結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行客戶端的初始化。
比如,將預(yù)置數(shù)據(jù)中的結(jié)構(gòu)相對比較簡單的數(shù)據(jù)(如結(jié)構(gòu)化數(shù)據(jù)和結(jié)構(gòu)相對比較簡單的非結(jié)構(gòu)化數(shù)據(jù))以kv結(jié)構(gòu)保存到所述raw文件中;而將預(yù)置數(shù)據(jù)中結(jié)構(gòu)相對比較復(fù)雜的非結(jié)構(gòu)化數(shù)據(jù)(如圖片數(shù)據(jù)、音頻數(shù)據(jù)或視頻數(shù)據(jù)),直接保存到所述logo文件中。本申請實施例中,一般將客戶端的安裝包中能夠用于保存預(yù)置數(shù)據(jù)的文件,稱為“資源文件”,比如上述的res下的raw文件, 或者assets下的logo文件,等等。
沿用上例,當(dāng)服務(wù)器采用“以kv結(jié)構(gòu),將預(yù)置數(shù)據(jù)中的諸如結(jié)構(gòu)化數(shù)據(jù)和結(jié)構(gòu)相對比較簡單的非結(jié)構(gòu)化數(shù)據(jù)保存到所述raw文件中,和/或,將預(yù)置數(shù)據(jù)中的諸如結(jié)構(gòu)相對比較復(fù)雜的非結(jié)構(gòu)化數(shù)據(jù)直接保存到所述logo文件中”的方式,在安裝包中設(shè)置數(shù)據(jù)時,步驟12中,就可以從安裝包的資源文件res中的所述raw文件中,獲取具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或,從安裝包的額外資源文件assets中的logo文件中,獲取具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù)——比如獲取作為預(yù)置數(shù)據(jù)的圖片數(shù)據(jù)。
需要說明的是,在將預(yù)置數(shù)據(jù)設(shè)置到客戶端的安裝包中時,考慮到格式比較復(fù)雜的預(yù)置數(shù)據(jù)可能導(dǎo)致用戶終端耗費大量的存儲資源,因此,在一種實施方式中,可以將格式比較復(fù)雜的預(yù)置數(shù)據(jù)轉(zhuǎn)化為比較簡單的格式,比如轉(zhuǎn)化為jsonstring格式,然后再以kv結(jié)構(gòu)保存該格式的預(yù)置數(shù)據(jù)。
本申請實施例中,也可以將結(jié)構(gòu)化預(yù)置數(shù)據(jù)轉(zhuǎn)化為jsonstring格式后,再以kv結(jié)構(gòu)保存轉(zhuǎn)化得到的預(yù)置數(shù)據(jù)。
比如,對某種格式比較復(fù)雜的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化得到的jsonstring格式的數(shù)據(jù)如下所示:
<stringname="servicedetaillist">[{"serviceid":"taobao_s_0000","name":"淘寶","labels":"cn,phone,購物,猜你喜歡","description":"淘,不出手心","gmtcreate":"1409027034000","gmtmodify":"1426675473000","logojson":"{\"backgroundcolor\":\"#ff4200\",\"image_url\":\"content://com.yunos.lifecard/logo/ic_servicescard_tao.png\",\"color\":\"#ffffff\",\"backgroundimage\":\"\",\"background_url\":\"content://com.yunos.lifecard/logo/taobao.png\",\"background_url2\":\"http://dl.django.t.taobao.com/rest/1.0/image?fileids\u003dzvay82jmrsa2y_gjr7ky7waaab8aaqec\u0026zoom\u003d96x96\"}","launchjson":"[{\"name\":\"淘寶\",\"url\":\"http://m.taobao.com\",\"login_type\":1}]","status":"1"}]</string>。
本申請實施例中,考慮到保存在用戶終端本地的安裝包中的預(yù)置數(shù)據(jù),有可能不適用于對客戶端進行初始化——比如預(yù)置數(shù)據(jù)有可能是比較舊的數(shù)據(jù), 而服務(wù)器早已對所述舊的數(shù)據(jù)進行了更新——因此,為避免利用不適用于對客戶端進行初始化的預(yù)置數(shù)據(jù)進行客戶端初始化而導(dǎo)致資源無謂浪費,步驟12的具體實現(xiàn)方式可以包括:用戶終端響應(yīng)于針對客戶端的初始化指令,判斷客戶端的安裝包是否滿足預(yù)置條件,若判斷結(jié)果為是,則從該安裝包中的資源文件中,獲取設(shè)置在資源文件中的預(yù)置數(shù)據(jù)。一般地,若判斷結(jié)果為否,則不從該資源文件中獲取預(yù)置數(shù)據(jù)并結(jié)束流程。
其中,判斷保存在本地的客戶端的安裝包是否滿足預(yù)置條件,比如可以包括:比較所述安裝包的版本與最近一次持久化到本地的預(yù)置數(shù)據(jù)對應(yīng)的版本;在比較結(jié)果為所述安裝包的版本比最近一次持久化到本地的預(yù)置數(shù)據(jù)對應(yīng)的版本更新時,判定所述安裝包滿足預(yù)置條件;否則,判定所述安裝包不滿足預(yù)置條件。
步驟13,用戶終端根據(jù)獲取的預(yù)置數(shù)據(jù),進行客戶端的初始化。
本申請實施例中,可以直接根據(jù)獲取的預(yù)置數(shù)據(jù)進行客戶端的初始化?;蛘?,也可以將獲取的預(yù)置數(shù)據(jù)保存到用戶終端本地的指定文件后,再從指定文件讀取預(yù)置數(shù)據(jù)進行客戶端的初始化。
比如,在執(zhí)行步驟13前,用戶終端可以根據(jù)獲取的預(yù)置數(shù)據(jù),對用戶終端本地的、用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間進行更新,得到更新后的存儲空間。從而后續(xù)可以從更新后的存儲空間中獲取預(yù)置數(shù)據(jù),并根據(jù)獲取的預(yù)置數(shù)據(jù),進行客戶端的初始化。
考慮到用戶最近可能對持久化到客戶端本地的預(yù)置數(shù)據(jù)進行過手動更新,若直接用安裝包中的預(yù)置數(shù)據(jù)覆蓋持久化到客戶端本地的相應(yīng)預(yù)置數(shù)據(jù),可能會發(fā)生更新時間較早的預(yù)置數(shù)據(jù)覆蓋更新時間較晚的預(yù)置數(shù)據(jù)的情況,因此,對用戶終端本地的、用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間進行更新,可以采用下述方式:
針對所述本地用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間中的每個預(yù)置數(shù)據(jù),分別執(zhí)行:
確定該預(yù)置數(shù)據(jù)的更新時間,以及安裝包中相應(yīng)的預(yù)置數(shù)據(jù)的更新時間;
判斷該預(yù)置數(shù)據(jù)的更新時間是否早于所述相應(yīng)的預(yù)置數(shù)據(jù)的更新時間;
在判斷結(jié)果為是時,使用所述相應(yīng)的預(yù)置數(shù)據(jù)更新該預(yù)置數(shù)據(jù),并將所述相應(yīng)的預(yù)置數(shù)據(jù)的更新時間作為該預(yù)置數(shù)據(jù)的更新時間進行保存。
例如,假設(shè)所述文件中的持久化到本地的預(yù)置數(shù)據(jù)為:界面圖片預(yù)置數(shù)據(jù)、服務(wù)預(yù)置數(shù)據(jù)、模板預(yù)置數(shù)據(jù)以及背景音樂預(yù)置數(shù)據(jù)。其中,所述界面圖片預(yù)置數(shù)據(jù)的更新時間為:2015年4月1號,服務(wù)預(yù)置數(shù)據(jù)的更新時間為:2015年4月6號,模板預(yù)置數(shù)據(jù)的更新時間為:2015年4月5號,背景音樂預(yù)置數(shù)據(jù)的更新時間為:2015年4月5號。所述安裝包中的預(yù)置數(shù)據(jù)(后文稱新預(yù)置數(shù)據(jù))的更新時間分別為:界面圖片新預(yù)置數(shù)據(jù)的更新時間為:2015年8月8號,服務(wù)新預(yù)置數(shù)據(jù)的更新時間為:2015年8月5,模板新預(yù)置數(shù)據(jù)的更新時間為:2015年8月6號,背景音樂新預(yù)置數(shù)據(jù)的更新時間為:2015年4月5號。
通過對所述安裝包中新預(yù)置數(shù)據(jù)的更新時間,與所述本地用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間中相應(yīng)的預(yù)置數(shù)據(jù)的更新時間進行比較,判斷出界面圖片預(yù)置數(shù)據(jù)、模板預(yù)置數(shù)據(jù)以及背景音樂預(yù)置數(shù)據(jù)的更新時間分別早于相應(yīng)的新預(yù)置數(shù)據(jù)的更新時間,則使用安裝包中的界面圖片新預(yù)置數(shù)據(jù)、服務(wù)新預(yù)置數(shù)據(jù)以及模板新預(yù)置數(shù)據(jù),對該文件中相應(yīng)的預(yù)置數(shù)據(jù)進行更新,并將所述新預(yù)置數(shù)據(jù)的更新時間作為該預(yù)置數(shù)據(jù)的更新時間。更新后,持久化到本地的預(yù)置數(shù)據(jù)的更新時間分別為:界面圖片預(yù)置數(shù)據(jù)的更新時間為:2015年8月8號,服務(wù)預(yù)置數(shù)據(jù)的更新時間為:2015年8月5,模板預(yù)置數(shù)據(jù)的更新時間為:2015年8月6號,背景音樂預(yù)置數(shù)據(jù)的更新時間為:2015年4月5號。
本申請實施例中,當(dāng)根據(jù)所述安裝包中的預(yù)置數(shù)據(jù),對本地用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間進行更新前,所述本地用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間中還不存在預(yù)置數(shù)據(jù)時(比如首次對客戶端進行初始化時),在執(zhí)行步驟13前,可以直接將所述安裝包中的預(yù)置數(shù)據(jù),寫入所述本地 用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間中。
比如,繼續(xù)沿用前文所述的例子,當(dāng)從所述安裝包的資源文件中,獲取設(shè)置在所述資源文件中的預(yù)置數(shù)據(jù),包括:從所述安裝包的資源文件res中的raw文件中,獲取具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)時,可以將獲取到的具備kv結(jié)構(gòu)的第一指定類別的預(yù)置數(shù)據(jù),持久化到本地的可擴展標(biāo)記語言xml文件中,并將獲取到的具備kv結(jié)構(gòu)的第二指定類別的預(yù)置數(shù)據(jù),持久化到本地數(shù)據(jù)庫中。其中,這里所述的第一指定類別的預(yù)置數(shù)據(jù),比如可以是在封裝到raw文件中之前,不用對格式進行轉(zhuǎn)化的預(yù)置數(shù)據(jù);這里所說的第二指定類別的預(yù)置數(shù)據(jù),比如可以是在設(shè)置到raw文件中之前,將其格式轉(zhuǎn)化為指定格式(比如jsonstring格式)后以kv結(jié)構(gòu)進行封裝的預(yù)置數(shù)據(jù),比如結(jié)構(gòu)化預(yù)置數(shù)據(jù)。
考慮到在客戶端初始化完成后,服務(wù)器后續(xù)還可能會對預(yù)置數(shù)據(jù)進行更新,且一般地,服務(wù)器端在更新應(yīng)用的預(yù)置數(shù)據(jù)時,可能是對客戶端的部分而非全部預(yù)置數(shù)據(jù)進行更新。針對這樣的情況,用戶終端可以僅下載被更新了的預(yù)置數(shù)據(jù)從而避免下載全部預(yù)置數(shù)據(jù)而耗費較多的處理資源。比如,在一種實施方式中,本申請實施例提供的方法可以包括:獲取持久化到本地的各預(yù)置數(shù)據(jù)更新時間中的最晚更新時間;將所述最晚更新時間發(fā)送給服務(wù)器;下載服務(wù)器提供的、更新時間晚于所述最晚更新時間的預(yù)置數(shù)據(jù);并利用下載的預(yù)置數(shù)據(jù)對持久化到本地的預(yù)置數(shù)據(jù)進行更新。采用這樣的方式,可以使服務(wù)器獲知應(yīng)該提供怎樣的預(yù)置數(shù)據(jù),從而避免服務(wù)器盲目提供預(yù)置數(shù)據(jù)的問題。
例如,假設(shè)下述條件成立:
1、持久化到本地的預(yù)置數(shù)據(jù)中,更新時間最晚的預(yù)置數(shù)據(jù)的更新時間為:2015年5月5號;
2、服務(wù)器端保存有更新時間分別為:2014年11月20號、2015年4月1號以及2015年8月10號的預(yù)置數(shù)據(jù);
則用戶終端可以將持久化到本地的最晚的更新時間:2015年5月5號,發(fā)送給服務(wù)器端,以使得服務(wù)器將更新時間晚于2015年5月5號的預(yù)置數(shù)據(jù)發(fā) 送給用戶終端,避免了下載大量預(yù)置數(shù)據(jù),從而節(jié)省了用戶終端的資源。
本申請實施例中,用戶終端可以是在接收到服務(wù)器發(fā)送的預(yù)置數(shù)據(jù)更新通知后,再從服務(wù)器下載預(yù)置數(shù)據(jù);或者,用戶終端也可以是定期向服務(wù)器進行查詢,當(dāng)查詢到預(yù)置數(shù)據(jù)發(fā)生更新后,從服務(wù)器下載預(yù)置數(shù)據(jù)。
需要說明的是,本申請實施例中所述的客戶端可以為安裝在特定用戶終端上的客戶端;其中,所述的特定用戶終端可以包括下述至少一種:
手機、路由器、機頂盒、家電設(shè)備以及車載裝置。
通過本申請實施例1提供的上述方法,由于可以將對具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù)設(shè)置在安裝包中,因此在初始化指令的觸發(fā)下,可以直接從該安裝包中獲取到具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù),無需從服務(wù)器獲取具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù),因此節(jié)約了客戶端初始化過程所耗費的時間,提高了該過程的效率。
實施例2
本申請實施例提供一種客戶端的初始化方法,用以解決現(xiàn)有技術(shù)存在的客戶端初始化過程耗時較長、效率較低的問題。該方法的具體實現(xiàn)流程示意圖如圖2所示,主要包括下述步驟:
步驟21,服務(wù)器獲得預(yù)置數(shù)據(jù);
步驟22,服務(wù)器在所述預(yù)置數(shù)據(jù)中,存在第一預(yù)定格式的預(yù)置數(shù)據(jù)時,將所述第一預(yù)定格式轉(zhuǎn)化為第二預(yù)定格式;
需要說明的是,由于在將所述的第一預(yù)定格式的預(yù)置數(shù)據(jù)持久化到本地時,可能會由于第一預(yù)定格式比較復(fù)雜,導(dǎo)致耗費移動端設(shè)備大量的存儲資源,在一種實施方式中,本申請實施例提供的方法,可以將第一預(yù)定格式的預(yù)置數(shù) 據(jù)轉(zhuǎn)化為比較簡單的格式,比如jsonstring格式。
步驟23,服務(wù)器將預(yù)置數(shù)據(jù)(包括無需進行格式轉(zhuǎn)換的數(shù)據(jù),以及進行格式轉(zhuǎn)換后得到的數(shù)據(jù))封裝到用于提供給用戶終端的安裝包,并發(fā)送給用戶終端進行保存。
一般地,服務(wù)器可以將預(yù)置數(shù)據(jù)中的結(jié)構(gòu)相對比較簡單的非結(jié)構(gòu)化數(shù)據(jù)(如kv結(jié)構(gòu)的非結(jié)構(gòu)化數(shù)據(jù))封裝到安裝包的raw文件中,此外,將轉(zhuǎn)化得到的jsonstring格式的數(shù)據(jù)以kv結(jié)也封裝到該raw文件中。并針對每個以kv結(jié)構(gòu)封裝的預(yù)置數(shù)據(jù),分別對應(yīng)保存一個gmt_modify值,該gmt_modify值用于表示該預(yù)置數(shù)據(jù)的更新時間。
例如,以生活服務(wù)類應(yīng)用為例,可以將應(yīng)用中的服務(wù)數(shù)據(jù)以kv結(jié)構(gòu)封裝到raw文件中,則單個服務(wù)數(shù)據(jù)可以由以下各個部分組成:
[serviceid]:text——服務(wù)唯一標(biāo)識id;
[name]:text——服務(wù)名稱,比如:淘寶等;
[logojson]:text——服務(wù)logo圖片;
[launchjson]:text——服務(wù)鏈接;
[status]:integer——是否可用:可用(1),下線(0);
[gmtcreate]:integer——創(chuàng)建時間;
[gmtmodify]:integer——更新時間。
此外,服務(wù)器可以將預(yù)置數(shù)據(jù)中的結(jié)構(gòu)相對比較復(fù)雜的非結(jié)構(gòu)化數(shù)據(jù),直接保存到指定的資源文件中,比如將圖片數(shù)據(jù)保存到assets中的logo文件中,并生成該預(yù)置數(shù)據(jù)對應(yīng)的統(tǒng)一資源標(biāo)識符(uniformresourceidentifier,uri),以便用戶終端后續(xù)可以根據(jù)該uri,從指定的資源文件中讀取預(yù)置數(shù)據(jù)。
步驟24,用戶終端接收初始化指令。
步驟25,用戶終端響應(yīng)于所述初始化指令,判斷保存的所述安裝包中的版本號是否大于客戶端當(dāng)前的版本號。
在判斷結(jié)果為是時,執(zhí)行步驟26;
在判斷結(jié)果為否時,結(jié)束流程。
步驟26,用戶終端從所述安裝包中讀取的預(yù)置數(shù)據(jù),進行客戶端的初始化。
比如,沿用前例,用戶終端可以通過下述方式,實現(xiàn)客戶端的初始化:
從所述安裝包的raw文件中,獲取具備kv結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù),并保存至本地的xml文件sharedpref中;
從所述安裝包的raw文件中,獲取具備kv結(jié)構(gòu)且格式為jsonstring的預(yù)置數(shù)據(jù)(結(jié)構(gòu)化預(yù)置數(shù)據(jù)),并保存至本地數(shù)據(jù)庫sqlitedatabase中。
在采用上述方式實現(xiàn)對于預(yù)置數(shù)據(jù)的獲取與保存后,用戶終端可以進一步執(zhí)行下述步驟:
用戶終端通過調(diào)用sharedperf提供的數(shù)據(jù)讀取接口,從sharedperf中,讀取具備kv結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù);
用戶終端通過調(diào)用sqlitedatabase提供的數(shù)據(jù)讀取接口,從sqlitedatabase中,讀取格式為jsonstring的結(jié)構(gòu)化預(yù)置數(shù)據(jù);
用戶終端根據(jù)圖片數(shù)據(jù)的uri,從assets中的logo文件中獲取圖片數(shù)據(jù)。其中,所述uri,可以是由客戶端中設(shè)置的用于提供該uri的方法“contentprovider”向用戶終端提供的;
利用讀取到的預(yù)置數(shù)據(jù),實現(xiàn)對客戶端的初始化,流程結(jié)束。
通過本申請實施例2提供的上述方法,由于可以將預(yù)置數(shù)據(jù)設(shè)置在安裝包中,因此在初始化指令的觸發(fā)下,可以直接根據(jù)該安裝包中的各預(yù)置數(shù)據(jù),實現(xiàn)對客戶端的初始化,無需在該指令的觸發(fā)下實時從服務(wù)器下載預(yù)置數(shù)據(jù),從而一方面解決了現(xiàn)有技術(shù)存在的客戶端初始化過程耗時較長、效率較低的問題,另一方面,還解決了現(xiàn)有技術(shù)中若用戶終端在接收到針對客戶端的初始化指令時,用戶終端不能連接到客戶端的服務(wù)器,則有可能導(dǎo)致客戶端初始化失敗的問題。
實施例3
本申請實施例提供一種客戶端的初始化裝置,用以解決現(xiàn)有技術(shù)存在的客戶端初始化過程耗時較長、效率較低的問題。該裝置的具體結(jié)構(gòu)示意圖如圖3所示,包括初始化指令接收單元31、預(yù)置數(shù)據(jù)獲取單元32以及初始化單元33。
其中,初始化指令接收單元31,用于接收針對客戶端的初始化指令;
預(yù)置數(shù)據(jù)獲取單元32,用于響應(yīng)于所述初始化指令,從所述客戶端的安裝包中的資源文件中,獲取設(shè)置在所述資源文件中的、初始化所述客戶端所需的預(yù)置數(shù)據(jù);其中,設(shè)置在所述資源文件中的預(yù)置數(shù)據(jù),包括:對具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或,具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù)。特別地,對具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),可以包括:對結(jié)構(gòu)化預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)。
初始化單元33,用于根據(jù)獲取的預(yù)置數(shù)據(jù),進行所述客戶端的初始化。
在一種實施方式中,預(yù)置數(shù)據(jù)獲取單元32,用于:判斷所述安裝包是否滿足預(yù)置條件;在判斷結(jié)果為是時,從所述安裝包中的所述資源文件中,獲取所述所需的預(yù)置數(shù)據(jù)。
在一種實施方式中,預(yù)置數(shù)據(jù)獲取單元32,用于:比較所述安裝包的版本與最近一次持久化到本地的預(yù)置數(shù)據(jù)對應(yīng)的版本;在比較結(jié)果為所述安裝包的版本比所述對應(yīng)的版本更新時,判定所述安裝包滿足預(yù)置條件;否則,判定所述安裝包不滿足預(yù)置條件。
在一種實施方式中,所述裝置還可以包括:更新單元,用于根據(jù)獲取的預(yù)置數(shù)據(jù),對本地用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間進行更新,得到更新后的存儲空間;
初始化單元33,用于在更新單元對本地用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間進行更新后,從所述更新后的存儲空間中獲取預(yù)置數(shù)據(jù),并根據(jù)獲取的預(yù)置數(shù)據(jù),進行所述客戶端的初始化。
在一種實施方式中,預(yù)置數(shù)據(jù)獲取單元32,還用于:當(dāng)更新單元根據(jù)所述 預(yù)置數(shù)據(jù),對本地用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間進行更新前,所述本地用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間中已存在預(yù)置數(shù)據(jù)時,針對本地用于保存持久化到本地的預(yù)置數(shù)據(jù)的存儲空間中的每個預(yù)置數(shù)據(jù),分別執(zhí)行:
確定該預(yù)置數(shù)據(jù)的更新時間,以及所述安裝包中相應(yīng)的預(yù)置數(shù)據(jù)的更新時間;
判斷該預(yù)置數(shù)據(jù)的更新時間是否早于所述相應(yīng)的預(yù)置數(shù)據(jù)的更新時間;
在判斷結(jié)果為是時,使用所述相應(yīng)的預(yù)置數(shù)據(jù)更新該預(yù)置數(shù)據(jù),并將所述相應(yīng)的預(yù)置數(shù)據(jù)的更新時間作為該預(yù)置數(shù)據(jù)的更新時間進行保存。
在一種實施方式中,預(yù)置數(shù)據(jù)獲取單元32,用于:獲取持久化到本地的各預(yù)置數(shù)據(jù)更新時間中的最晚更新時間;將所述最晚更新時間發(fā)送給服務(wù)器;下載服務(wù)器提供的、更新時間晚于所述最晚更新時間的預(yù)置數(shù)據(jù);并利用下載的預(yù)置數(shù)據(jù)對持久化到本地的預(yù)置數(shù)據(jù)進行更新。
在一種實施方式中,預(yù)置數(shù)據(jù)獲取單元32用于:從所述安裝包的資源文件res中的raw文件中,獲取具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù);從所述安裝包的額外資源文件assets中的logo文件中,獲取作為預(yù)置數(shù)據(jù)的圖片數(shù)據(jù)。
在一種實施方式中,本申請實施例提供的該裝置還可以包括持久化單元,用于:用于當(dāng)預(yù)置數(shù)據(jù)獲取單元32用于從所述安裝包的資源文件res中的raw文件中,獲取具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)時,將獲取到的具備kv結(jié)構(gòu)的第一指定類別的預(yù)置數(shù)據(jù),持久化到本地的可擴展標(biāo)記語言xml文件中;將獲取到的具備kv結(jié)構(gòu)的第二指定類別的預(yù)置數(shù)據(jù),持久化到本地數(shù)據(jù)庫中。
通過本申請實施例3提供的上述方法,由于可以將對具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù)設(shè)置在安裝包中,因此在初始化指令的觸發(fā)下,可以直接從該安裝包中獲取到具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù)進行轉(zhuǎn)化后得到的、具備kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或具備除kv結(jié)構(gòu)外的其他 數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù),無需從服務(wù)器獲取具備非鍵值對kv結(jié)構(gòu)的預(yù)置數(shù)據(jù),和/或具備除kv結(jié)構(gòu)外的其他數(shù)據(jù)結(jié)構(gòu)的非結(jié)構(gòu)化預(yù)置數(shù)據(jù),因此節(jié)約了客戶端初始化過程所耗費的時間,提高了該過程的效率。。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器 (ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。