Android與H5互調(通過實例來瞭解Hybrid App)

来源:http://www.cnblogs.com/wujiancheng/archive/2017/05/07/6821223.html
-Advertisement-
Play Games

前些日子,Android原生開發將被取締的吵得火熱,JavaScript是能做一個完全的APP,但只使用JavaScript做出來的APP也不會牛逼到哪裡去。最好的是混合(Hybrid)開發,在需要的時候使用JavaScript,各有好處。 Hybrid App中原生頁面 VS H5頁面:http: ...


  前些日子,Android原生開發將被取締的吵得火熱,JavaScript是能做一個完全的APP,但只使用JavaScript做出來的APP也不會牛逼到哪裡去。最好的是混合(Hybrid)開發,在需要的時候使用JavaScript,各有好處。

 

  Hybrid App中原生頁面 VS H5頁面:http://www.jianshu.com/p/00ff5664e000

  原生頁面和H5頁面的優劣勢分析:

 

原生頁面

優勢:

(1)運行速度比較快

(2)能使用設備的底層功能,如攝像頭、方向感測器、重力感測器、撥號、GPS、語音、簡訊、藍牙等

(3)在界面設計、功能模塊、操作邏輯等層面相較web更易做到App的便捷性和舒適性,功能更加強大

(4)節省流量

劣勢:

(1)不同的操作系統(如Android和iOS)需要獨立的進行開發,使用其各自的開發包、開發工具和控制項

(2)每次有更新,都需要重新打包一次發佈到應用平臺上,且每次要向各個應用商店進行提交審核。之後用戶需要手動進行點擊更新安裝(安裝成本較高)

(3)開發成本比較高,尤其需要適配各種機型時(如Android應用,需要適配各種Android手機)

 

H5頁面

優勢:

(1)由於是運行在瀏覽器上,所以只需要開發一次便可以在不同的操作系統上顯示

(2)迭代版本時,不需要打包便可以發佈(實時更新、快速迭代),與雲端實現實時數據交互

(3)開發成本相對較低,對瀏覽器的適配較簡單,且發佈門檻相對較低

劣勢:

(1)每次打開頁面,都得重新載入,獲取數據...

(2)過於依賴網路,速度無法保證。特別在弱網環境下,不僅耗費流量而且載入緩慢,就算是WiFi情況下也不容樂觀

(3)只能使用有限的設備底層功能(無法使用攝像頭、方向感測器、重力感測器、撥號、GPS、語音、簡訊、藍牙等功能)

(4)仍處於發展階段,部分功能無法在基於現有技術的瀏覽器基礎上實現,且無法全面的顯示最完美的用戶體驗,只能用現有技術去彌去找最佳解決方案

 

  分析淘寶中的原生頁面和H5頁面

 

----------------------------------------------------------------------------------------------------------------------------

 ---------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------

 ---------------------------------------------------------------------------------------------------------------------------

 

 

 

由上圖得知,是否有底部tab導航欄也無法區別出H5頁面

 

----------------------------------------------------------------------------------------------------------------------------

 ---------------------------------------------------------------------------------------------------------------------------

如下圖是一個原生與webview混排的界面,紅色線框是各控制項的繪製邊界,中間那一大塊佈局豐富的界面沒有顯示出很多邊界紅色,就是H5實現的。

 

 

  案例:

JS調用Java,將Java中的Json數據顯示在H5界面,點擊調起視頻播放器

  效果圖: 

 

  初始化webView: webview = (WebView) findViewById(R.id.webview);

  設置WebSettings

 1        //設置支持javaScript
 2         webSettings = webview.getSettings();
 3         //設置支持javaScript
 4         webSettings.setJavaScriptEnabled(true);
 5         //設置文字大小
 6         webSettings.setTextZoom(100);
 7         //不讓從當前網頁跳轉到系統的瀏覽器中
 8         webview.setWebViewClient(new WebViewClient() {
 9             //當載入頁面完成的時候回調
10             @Override
11             public void onPageFinished(WebView view, String url) {
12                 super.onPageFinished(view, url);
13             }
14         });

 

1      //添加javaScript介面
2      webview.addJavascriptInterface(new MyJavascriptInterface(), "Android");
3      // body onload="javascript:Android.showcontacts()"與內部類中的方法相同
// "Android"必須與HTMl中的body onload="javascript:Android.showcontacts()"相同
4 //可以載入網路的頁面,也可以載入應用內置的頁面 5 webview.loadUrl("http://192.168.191.1:8080/JsCallJava.html");

 

 

 

 

javaScript介面的內部類設置如下:

 1 class MyJavascriptInterface {
 2         //調起Vedio
 3         @JavascriptInterface //android4.4以後瀏覽器內核改變了,但webView是使用原來的內核
 4         public void call(String video) {
 5             Intent intent = new Intent();//隱式意圖
 6             intent.setDataAndType(Uri.parse(video),"video/*");
 7             startActivity(intent);
 8         }
 9 
10         //載入Vedio信息
11         @JavascriptInterface
12         public void showcontacts(){
13             String json = "[{\"name\":\"LikeYou\",\"video\":\"http://192.168.191.1:8080/LikeYou.mp4\"}]";
14             // 調用JS中的方法
15             webview.loadUrl("javascript:show("+"'"+json+"'"+")");
16         }
17     }

 

  
  源碼及資源地下載 : http://www.cnblogs.com/wujiancheng/

(若沒有效果,請將build.gradle 中的targetSdkVersion改為低於19) 因為android4.4以後瀏覽器內核改了,而webView還是使用原來的webkit內核

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 周末沒出門,熬了兩個夜整理代碼、打磨圖示,給大家奉上本文。敢說最準確,因為:1. 我嚴格對照所畫時序圖的每個步驟,開發了完整的跨域單點登錄範例;2. 所有服務端步驟,都在代碼中逐一標註,跟蹤代碼就能兩相對照,實際的深入理解流程;3. SSO核心在寫Cookie、URL傳參策略,其參與對象多、邏輯分支... ...
  • 本章一開始舉了中國古代對婦女制定的 “三從四德” 的道德規範,形象地將女性在 “未嫁 出嫁 喪父” 三個不同的狀態下請示出門逛街獲得的處理,未嫁的時候,請示父親;出嫁了,請示丈夫;丈夫去世了,請示兒子。責任鏈就是:父親 丈夫 兒子。如果出嫁了,請示父親,會得到什麼結果?答案是:父親告訴他,你該去請示 ...
  • 當EditText編輯時 hint 在 6.0 手機上顯示不出來。。。。 就要增加一句話去重新設置顏色值 Android:textColorHint = "#707070" ...
  • 原文鏈接:http://blog.csdn.net/zhang31jian/article/details/23258065 獲取SharedPreferences的兩種方式: 1 調用Context對象的getSharedPreferences()方法 2 調用Activity對象的getPref ...
  • 課程1B主要講解了Android UI的ViewGroups(視圖組)、LinearLayout(線性佈局)、RelativeLayout(相對佈局),Portrait Mode(豎屏模式)、Landscape Mode(橫屏模式)以及layout_weight(佈局權重)在UI佈局中的用處。 此外... ...
  • 1.描述:獲取消息評論數據 2.介面 ...
  • 1.根據當前用戶的手機號獲取朋友圈的最新消息,可分頁顯示。 2.介面: ...
  • 一、應用場景 之前做商城應用時,會有對用戶資料的設置情況進行限制,如下: (1)用戶郵箱,應當只允許輸入英文字母,數字和@.兩個符號, (2)用戶手機,應當只能輸入數字,禁止輸入其他字元。 (3)用戶密碼,應當不能輸入空格以及中文字元等。 二、解決方案 針對用戶郵箱以及用戶手機,有以下兩種解決方案: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...