商城项目实战 | 18.1 Native 与 HTML5 交互

本文为菜鸟窝作者刘婷的连载。菜
菜鸟窝-程序员的黄埔军校

当看到这个标题的时候,很多人都觉得很熟悉啊,现在市场上面大多数的 App 都使用到了这个,使用原生 Native 嵌套 Html5,而这种模式的出现,也出现了一个新的词叫做 Hybrid App ,也就是混合 App,这篇的文章主要就是来分享下 Hybrid App 的相关知识以及下如何实现 Native 和 Html5 的交互。

App 的三种主要类别

目前主流 App 应用程序主要分为三类,分别为 Web App、Native App 和 Hybrid App,也就是网页 App、原生 App 和混合 App。其中网页 App 主要是借助于浏览器就可以直接运行使用,原生 App 是原生的应用程序,混合 App 就是前面两者的结合体。

1. Web App 的详细介绍

Web App 指采用 Html5 语言写出的 App,不需要下载安装。类似于现在所说的轻应用。生存在浏览器中的应用,基本上可以说是触屏版的网页应用。

1.1 Web App 的优点

(1)轻应用,借助于浏览器,不需要太高的成本,所以开发成本相对较低。
(2)直接可以在后台服务器上面更新,更新方便而且快。
(3)更新无需通知用户,不需要手动升级。
(4)在 IOS 、Android 和 Windows 等平台和终端都可以使用,能够跨多个平台和终端。

1.2 Web App 的缺点

(1)网页的加载,只是临时性的入口。
(2)无法获取系统级别的通知,提醒,动效等等,缺少原生的一些功能。
(3)用户留存率低。
(4)设计受限制诸多。
(5)受制于网速等,体验较差。

2. Native App 的详细介绍

Native App 指的是原生程序,一般依托于操作系统,有很强的交互,是一个完整的 App,可拓展性强,但是需要用户下载安装使用。

2.1 Native App 的优点

(1)打造完美的用户体验。
(2)原生的应用程序,性能稳定。
(3)操作速度快,上手流畅。
(4)访问本地资源(通讯录,相册)方便。
(5)设计出色的动效,转场。
(6)拥有系统级别的贴心通知或提醒。
(7)用户留存率高。

2.2 Native App 的缺点

(1)开发成本高(不同平台有不同的开发语言和界面适配)。
(2)维护成本高(例如一款App已更新至V5版本,但仍有用户在使用 V2, V3, V4 版本,需要更多的开发人员维护之前的版本)。
(3)更新缓慢,根据不同平台,提交–审核–上线 等等不同的流程,需要经过的流程较复杂。

3. Hybrid App 的详细介绍

Hybrid App 指的是半原生半Web的混合类 App,需要下载安装,看上去类似 Native App,但只有很少的 UI Web View,访问的内容是 Web,比如淘宝、京东等 App 都是这种类型的。

3.1 Hybrid App 的优点

(1)极力去打造类似于 Native App 的体验。
(2)可以简单更新 APP 内部的局部内容,拥有 Web App 的优势。
(3)结合了 Native App 和 Web App 的优点,性能也相对稳定。

3.2 Hybrid App 的缺点

(1)受制于技术、网速等条件,跨平台要求较高。
(2)原生和网页的融合向不完善,技术不是很成熟,还在不断更新中。
(3)还是需要较高的开发和维护成本。

4. 三种类别的对比

上面详细介绍了三种类别的概念和优缺点,对于这三种类型的 App 也有了一定的认识了,最后总结下这三种类型,看图说话。

对比图
对比图

上图中对于 Web App 、Native App 和 Hybrid App 的主要特性、平台使用以及网络要求做了详细的对比。

实现 Native 和 Html5 的交互

说到交互的话,就可以简单的分为两种了,分别为 Android 调用 HTML 和 HTML 调用 Android,下面是详细的交互步骤。

1. 添加 WebView

在布局文件中添加 WebView 用来加载 Web 页面的展示。

<WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>

WebView 是 Android 原生中的控件之一,直接在 xml 布局文件中添加即可。

2. 设置 WebView 支持 JS 脚本

如果需要 WebView 实现和原生的交互,那么就要让 WebView 支持执行 JS 的脚本。

webView.getSettings().setJavaScriptEnabled(true);

在 Html5 中的功能操作都是使用 JS 来实现的,WebView 默认是不支持 JS 脚本,所以这里必须要先设置支持执行 JS 的脚本。

3. 实现 JS 调用 Android

在新建的 HTML5 页面中添加一个输入框 input 和 按钮 button 控件,并且设置样式,这里就不多讲了,主要的是要讲如何实现交互。

首先在 Activity 中 new 一个 JavascriptInterface,命名为 WebAppInterface,也就是 JS 的脚本接口,用来交互使用,然后在 WebAppInterface 中添加方法 sayHello(String name);

       @JavascriptInterface
        public void sayHello(String name) {

            Toast.makeText(context, "name=" + name, Toast.LENGTH_LONG).show();

        }

方法上面的注解 @JavascriptInterface 必不可少,否则会报错的,在 Activity 中写好方法后,就要在 Html5 页面中添加调用 sayHello(String name) 的 function 方法。

function sayhello(){


           var name = document.getElementById("txtName").value;

           window.app.sayHello(name);//传参数给APP

}

获取到输入框 input 的内容,然后调用 Android 中的 sayHello(String name) 方法,将内容使用 Toast 弹出来。

4. 实现 Android 调用 JS

实现 Android 调用 JS 和实现 JS 调用 Android 正好是反过来的,Android 调用 JS 是要实现在原生的界面中调用 Html5 中的 function 方法,就先写好 function。

function showName(name){

      document.getElementById("txtName").value=name;

}

这里的 function 是用于给输入框 input 设置 value 值。

然后在 Activity 中写入对 function 的调用,不过既然需要调用,那就为原生界面 XML 布局添加一个按钮,给这个按钮绑定点击事件来调用 JS 脚本。

<Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="调用JS"/>

按钮加好了,之后就是绑定点击事件。

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                   //点击事件
            }
        });

对于 JS 脚本的调用放在按钮 button 的点击事件中。

runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    webView.loadUrl("javascript:showName('" 菜鸟窝 "')");
                }
            });

调用 JS 脚本 function,将 "菜鸟窝" 字符串传入到 Html5 的页面输入框 input 中。

最终效果图

Native 和 Html5 的简单交互代码都已经写好了,最后运行获取效果图。

效果图
效果图

点击“调用 JS”按钮,给 Html5 页面的输入框 input 赋予了 value 值——“菜鸟窝”,然后点击 Html5 页面的 “say Hello” 按钮来 Toast 出输入框 input 的 value 值。

注册有礼.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,077评论 25 707
  • 文/小昭11 看完《人生在于心安》,这本星云大师的著作之后受益匪浅,对于生命有了更加深刻的理解和思考,在这里与大...
    小昭11阅读 1,821评论 9 4
  • 语言是人类最重要的交际工具,是人们进行沟通的主要表达方式。人们借助语言保存和传递人类文明的成果。所以语言的...
    可丝阅读 396评论 2 8
  • 这是
    蝈蝈_3fe3阅读 125评论 0 0
  • 氛围的营造也很重要。 寥寥几笔,简笔画不是为了追求逼真,而是要用简单的线条勾勒出物体最明显的特征。 人人都能看懂简...
    范季康阅读 220评论 0 0