久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3150|回復: 0
打印 上一主題 下一主題
收起左側

商城開發筆記-13-Android與HTML5交互

[復制鏈接]
跳轉到指定樓層
樓主
ID:109770 發表于 2016-3-22 17:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一、WebAppHybrid AppNativeApp介紹與對比

     目前主流應用程序大體分為三類:Web App、HybridApp、 NativeApp。如下圖所示:


首先,我們來看看什么是 Web App、HybridApp、 NativeApp。

1.Web APP例子:京東http://m.jd.com/
Web App指采用Html5語言寫出的App,不需要下載安裝。類似于現在所說的輕應用。生存在瀏覽器中的應用,基本上可以說是觸屏版的網頁應用。
優點
(1)開發成本低
(2)更新快
(3)更新無需通知用戶,不需要手動升級
(4)能夠跨多個平臺和終端
缺點:
(1)臨時性的入口
(2)無法獲取系統級別的通知,提醒,動效等等
(3)用戶留存率低
(4)設計受限制諸多
(5)體驗較差

下圖是WebAPP受到的限制:

在設計Web APP時,應當遵循以下幾點:
1. 簡化
o             簡化不重要的動畫/動效
o             簡化復雜的圖形文字樣式

2. 少用
o             少用手勢,避免與瀏覽器手勢沖突
o             少用彈窗

3. 減少
o             減少頁面內容
o             減少控件數量
o             減少頁面跳轉次數,盡量在當前頁面顯示

4. 增強
o             增強Loading時的趣味性
o             增強頁面主次關系
o             增強控件復用性

2.Hybrid App例子:淘寶、餓了么、京東、QQ、微信等等。
HybridAPP指的是半原生半Web的混合類App。需要下載安裝,看上去類似NativeApp,但只有很少的UI WebView,訪問的內容是 Web 。
例如Store里的新聞類APP,視頻類APP普遍采取的是Native的框架,Web的內容。
HybridApp 極力去打造類似于NativeApp 的體驗,但仍受限于技術,網速,等等很多因素。尚不完美。

3.Native App
NativeAPP 指的是原生程序,一般依托于操作系統,有很強的交互,是一個完整的App,可拓展性強。需要用戶下載安裝使用。
優點:
(1)打造完美的用戶體驗
(2)性能穩定
(3)操作速度快,上手流暢
(4)訪問本地資源(通訊錄,相冊)
(5)設計出色的動效,轉場,
(6)擁有系統級別的貼心通知或提醒
(7)用戶留存率高
缺點:
(1)分發成本高(不同平臺有不同的開發語言和界面適配)
(2)維護成本高(例如一款App已更新至V5版本,但仍有用戶在使用V2, V3, V4版本,需要更多的開發人員維護之前的版本,不然舊版本出問題了,用戶可能就不用了)
(3)更新緩慢,根據不同平臺,提交–審核–上線 等等不同的流程,需要經過的流程較復雜



二、技術特性對比
       由上圖可見,WebAPP 的開發基于Html5語言。而Html5語言本身又有著不可避免的局限性。正是這些局限性的存在,使得Web App在體驗中要遜于NativeApp


三、HybridApp開發中AndroidH5JS)交互
       既然混合APP現在這么流行,開發成本、體驗都是開發技術中的首選,那么我們有必要來學習一下。

       Android中使用HTML開發的核心是使用WebView、原生APIJS的交互。
AndroidHTML5的交互有2種情況:

1.Android原生API 調用HTML頁面中的JS代碼
2.HTML頁面中的JS代碼調用Android原生API

為什么需要交互?因為HTML說到底只不過是一個靜態的Layout,只有與原生API進行交互才能開發我們需要的功能。

下面開始介紹主要的核心步驟:

1.設置webView允許執行JS腳本:
webSettings.setJavaScriptEnabled(true);

2.添加通信接口(注意:InterfaceName要與JS中的名字一致)
webView.addJavascriptInterface(Interface,InterfaceName)

3. JS調用Android
InterfaceName.MethodName

4. Android調用JS(參數可以通過+“”+來拼接)
webView.loadUrl("javascript:functionName()");


例子代碼:
/**
* 初始化WebView
*/
private void initWebView() {
    WebSettings settings = wv_detail.getSettings();
    //可以執行JS
    settings.setJavaScriptEnabled(true);
    //不阻塞網絡圖片
    settings.setBlockNetworkImage(false);
    //使能緩存
    settings.setAppCacheEnabled(true);
    appInterface = newAppInterface(this);
    //添加JS接口
    wv_detail.addJavascriptInterface(appInterface, "appInterface");
    //添加監聽
    wv_detail.setWebViewClient(new MyWebViewClient());
    wv_detail.loadUrl(Constants.URL_GOOD_DETAIL);
}
/**
* AndroidJS通信的接口
*/
class AppInterface {
    private Context mCtx;
    public AppInterface(Context mCtx) {
        this.mCtx = mCtx;
    }
    //Android調用JS
    @JavascriptInterface
    public void showDetail(final long goodId) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                wv_detail.loadUrl("javascript:showDetail(" + goodId + ")");
            }
        });
    }
    //JS調用Android,這里只是在Android端寫好的方法
    @JavascriptInterface
    public void buy(long goodId) {
        //做你需要做的事情
    }
    //
}
/**
* 監聽
*/
class MyWebViewClient extends WebViewClient {
    //頁面有鏈接點擊時候調用
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //自定義功能
        if (url.startsWith("nan://.....")) {
            //自定義功能,比如打電話,等
        }
        return super.shouldOverrideUrlLoading(view, url);
    }
    //頁面加載完畢調用(因為JS有些方法需要在頁面加載完畢的時候才能調用,不然沒效)
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        appInterface.showDetail(mGood.getId());
    }
}

下面給出HTML中的JS代碼:
<script>
    $(function(){
       $("#btnBuy").click(function(){
           var id = $("#txtWareId").val();
           //JS調用Android中的方法
           window.appInterface.buy(id);
       });
    })
    //Android調用的方法
    function showDetail(id){
        $("#txtWareId").val(id);
        $.ajax({
            url:"get?id="+id,
            success:function(ware){
                $("#ware_name").html(ware.name);
                $("#ware_img").attr("src",ware.imgUrl);
                $("#ware_price").html(" "+ware.price);
                $("#ware_sale_quantity").html(ware.sale);
            }
        })
    }
</script>


四、結束語
       好了,今天的筆記就到這里了,今天大年初一,楠妹妹祝大家猴年大吉O(_)O~~!至于高級的話,我們還需要去了解WebView的優化,學習前端的開發技術,WebViewClientWebChromeClient的使用與區別,等等。

WebViewClientWebChromeClient的區別:
WebViewClient主要幫助WebView處理各種通知、請求事件的
WebChromeClient主要輔助WebView處理Javascript的對話框、網站圖標、網站title、加載進度等。

看上去他們有很多不同,實際使用的話,如果你的WebView只是用來處理一些html的頁面內容,只用WebViewClient就行了,如果需要更豐富的處理效果,比如JS、進度條等,就要用到WebChromeClient



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 夜夜骑首页 | 9191在线播放 | 色综合色综合 | 午夜视频在线 | 不卡在线视频 | 一区二区在线看 | 久久精品网 | 羞羞的视频在线观看 | 日韩在线精品视频 | 在线一区二区观看 | 亚洲精彩视频 | 亚洲人成免费 | 亚洲精品久久国产高清情趣图文 | 日日摸日日碰夜夜爽2015电影 | 免费视频一区二区 | 午夜精品久久久久99蜜 | 欧美 日韩 中文 | 天天色图| 国产精品久久久久久久久久 | 嫩草视频在线免费观看 | 99福利网| 人人干人人超 | 91欧美激情一区二区三区成人 | 久久国产精品无码网站 | 视频在线一区二区 | 91精品国产99 | 亚洲精品日韩一区二区电影 | 黄色毛片大全 | 国产精品视频久久久久久 | 欧美 日韩 国产 一区 | 欧美精品一区久久 | 在线三级电影 | 亚洲精品一区二区三区蜜桃久 | 午夜精品久久久久久不卡欧美一级 | 国产精品999 | 999精品网 | 精品一区二区三区91 | 国产日韩精品视频 | 9久9久9久女女女九九九一九 | 欧美日一区| 久久狠狠|