輕量級(jí)Android ?H5 Native Hybrid 框架

Hybrid

輕量級(jí) H5 Native Hybrid 框架

輕量級(jí)litehybrid框架適合適合大多數(shù) app 的 H5 Native 交互的,交互原理較為簡單。
GitHub 地址:LiteHybrid。其代碼分兩部分,litehybird/ 為框架代碼。 example/ 為示例代碼,

原理:

1. 封裝原生 webview,使用 WebViewClient 與 WebChromeClient
2. H5 調(diào)用 Native 采用 js prompt 方式
3. Native 調(diào)用 H5 采用 loadurl API

使用說明:

1. errorview 和 loadingview 可以自定義

2. 對 WebView 設(shè)置可以通過 LHPreferences傳遞,如 agent等

3. 通過INVOKE注解,來使H5調(diào)用相應(yīng)Native函數(shù),參見INVOKE類,結(jié)構(gòu)合理。

使用方式:

其中,H5調(diào)用 native,以 JSONObject 方式傳遞調(diào)用信息,格式約定如下:

{
  "invoke": "ANNOTATION_METHOD" 
  "paras": JSONObject
}

其中,"invoke" 值為字符串,對應(yīng)調(diào)用方法,如下文中 popToast。"paras" 為對應(yīng)參數(shù)信息,參數(shù)內(nèi)容約定為 JSONObject.

“ANNOTATION_METHOD” 聲明如下,參見 WebViewActivity 里的 Invoker1:

@INVOKE("popToast")
public void popToast(JSONObject msgObj) {
...
}

注意事項(xiàng):

1. 方法為 public,否則會(huì)有 IllegalAccessException
2. 方法約定一個(gè)參數(shù),JSONObject paras,為H5 傳遞來 paras 值
3. 方法 @INVOKE("popToast") 注解中的 popToast等字段,對應(yīng) H5 傳遞來的 XXX_METHOD,采用字符串對比方式定位應(yīng)該調(diào)用函數(shù)。

webview 使用經(jīng)驗(yàn)

H5頁面加載過程中的狀態(tài)處理

webview 通過WebViewClient 處理H5頁面加載過程中的狀態(tài),頁面加載時(shí)候, WebviewClient 給出的回調(diào)調(diào)用順序不同,通常使用的三種回調(diào)分析如下:

正常情況下

onPageStarted -> onPageFinished

失敗情況下:

onPageStarted -> onReceivedError -> onPageFinished

超時(shí)情況下:

onPageStarted -> 30s-> onReceivedError -> onPageFinished 

加載過程中重試:

onPageStarted -> 重試-> onPageFinished -> onPageStarted
H5內(nèi)JS的回調(diào)處理

webview 通過 WebChromeClient處理 H5 內(nèi)js的回調(diào),本框架使用了onJsPrompt方式,其他還有alert方式等。

其他
1. webview 在被銷毀后,litehybrid的 LHWebView 中有標(biāo)志位標(biāo)志進(jìn)行判斷,因?yàn)閣ebview銷毀后并不立即為空,再調(diào)用可能會(huì)引發(fā)異常。此處同Android SDK中的的 webviewfragment處理一致。

2. 提前超時(shí):提前超時(shí)時(shí),使用了 loadurl("about:blank") 進(jìn)行清除緩存,但loadurl("about:blank") 會(huì)重新執(zhí)行 webview 的生命周期,LHWebViewClient 有標(biāo)志位進(jìn)行處理。

3. 賬戶信息應(yīng)當(dāng)采用諸如cookie方式注入提取,example中未體現(xiàn)。

4. webview onPagefinished 后,js 不一定完全加載成功。最好方式是用JS的回調(diào)通知native調(diào)用H5內(nèi)js時(shí)機(jī)準(zhǔn)備好。

Please read the fucking source code, 不好的地方指出來相互學(xué)習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容