android js交互

WebView性能、体验分析与优化

落爺英雄遲暮 提交于 2020-01-04 03:27:14
在App开发中,内嵌WebView始终占有着一席之地。它能以较低的成本实现Android、iOS和Web的复用,也可以冠冕堂皇的突破苹果对热更新的封锁。 然而便利性的同时,WebView的性能体验却备受质疑,导致很多客户端中需要动态更新等页面时不得不采用其他方案。 以发展的眼光来看,功能的动态加载以及三端的融合将会是大趋势。那么如何克服WebView固有的问题呢?我们将从性能、内存消耗、体验、安全几个维度,来系统的分析客户端默认WebView的问题,以及对应的优化方案。 性能 对于WebView的性能,给人最直观的莫过于:打开速度比native慢。 是的,当我们打开一个WebView页面,页面往往会慢吞吞的loading很久,若干秒后才出现你所需要看到的页面。 这是为什么呢? 对于一个普通用户来讲,打开一个WebView通常会经历以下几个阶段: 交互无反馈 到达新的页面,页面白屏 页面基本框架出现,但是没有数据;页面处于loading状态 出现所需的数据 如果从程序上观察,WebView启动过程大概分为以下几个阶段: 如何缩短这些过程的时间,就成了优化WebView性能的关键。 接下来我们逐一分析各个阶段的耗时情况,以及需要注意的优化点。 WebView初始化 当App首次打开时,默认是并不初始化浏览器内核的;只有当创建WebView实例的时候,才会创建WebView的基础框架。

WebView性能、体验分析与优化

一个人想着一个人 提交于 2020-01-04 03:26:56
育新 徐宏 嘉洁 · 2017-06-09 20:03 在App开发中,内嵌WebView始终占有着一席之地。它能以 较低的成本 实现Android、iOS和Web的复用,也可以冠冕堂皇的突破苹果对 热更新 的封锁。 然而便利性的同时,WebView的性能体验却 备受质疑 ,导致很多客户端中需要动态更新等页面时不得不采用其他方案。 以发展的眼光来看,功能的动态加载以及 三端的融合将会是大趋势 。 那么如何克服WebView固有的问题呢? 我们将从性能、内存消耗、体验、安全几个维度,来系统的分析客户端默认WebView的问题,以及对应的优化方案。 性能 对于WebView的性能,给人最直观的莫过于: 打开速度比native慢 。 是的,当我们打开一个WebView页面,页面往往会慢吞吞的loading很久,若干秒后才出现你所需要看到的页面。 这是为什么呢? 对于一个普通用户来讲,打开一个WebView通常会经历以下几个阶段: 交互 无反馈 到达新的页面, 页面白屏 页面基本框架出现,但是没有数据; 页面处于loading状态 出现所需的数据 如果从程序上观察,WebView启动过程大概分为以下几个阶段: 如何 缩短这些过程的时间 ,就成了优化WebView性能的关键。 接下来我们逐一分析各个阶段的耗时情况,以及需要注意的优化点。 WebView初始化 当App首次打开时

js与app交互

China☆狼群 提交于 2019-12-19 13:19:39
1. 判断当前页面的环境 var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端 var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 if(isAndroid){ //android环境            JSAndroid.getToken() }else if(isiOS){ //ios环境       getToken()      } 2.由于ios内部问题 有时要做特殊处理 web端: /*这段代码是固定的,必须要放到js中*/ function setupWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); } if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); } window.WVJBCallbacks = [callback]; var WVJBIframe =

为Phonegap Android平台增加websocket支持,使默认成为socket.io首选通

只谈情不闲聊 提交于 2019-12-06 12:17:03
为Phonegap Android平台增加websocket支持,使默认成为socket.io首选通道选择 广而告之 使用socket.io作为跨浏览器平台的实时推送首选,经测试在各个主流浏览器上测试都确实具有良好的下实时表现。这里为推广 socketio-netty 服务器端实现哈,做次广告,同时预热一下: socketio-netty : 又一款socket.io服务器端实现,兼容0.9-1.0版本~ 示范目的 我们要构建一个在市面上常见浏览器上都可以正常运行的集体聊天应用,保证在IE6+,Firefox,Chrome,Safari,Opear,IOS,Android等可以正常运转,根据具体环境自动选择最佳的通信通道。 嗯,既然是跨浏览器平台,那自然选择 socket.io(客户端js) 了。它也是本文的重心,本文的最终是让 socket.io(客户端js) 版本在Phonegap包装的Android Apk程序中可以使用Websocket协议,以达到快速交换数据的目的,提高交换性能。 同时也保证我们的示范应用尽可能的做到编写一次,到处运行哈。 还好,有了 socket.io(客户端js) + socketio-netty (socket.io服务器端JAVA实现) + Phonegap , 我们构建各种交互性非常强的的跨浏览器、跨移动应用的HTML应用,是个不错的选择。 另

WebView开源库终极方案

╄→гoц情女王★ 提交于 2019-12-05 16:41:31
目录介绍 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 1.4 WebView知识点 02.如何使用 2.1 如何引入 2.2 最简单使用 2.3 常用api 2.4 使用建议 2.5 异常状态类型区分 2.6 该库流程图 03.js调用 3.1 Java调用js方法 3.2 js调用java方法 3.3 js的调用时机分析 3.4 js交互原理分析 04.问题反馈 05.webView优化 06.关于参考 07.其他说明介绍 01.前沿说明 基于腾讯x5开源库,提高webView开发效率,大概要节约你百分之六十的时间成本。该案例支持处理js的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常error状态、支持视频播放并且可以全频、支持加载word,xls,ppt,pdf,txt等文件文档、发短信、打电话、发邮件、打开文件操作上传图片、唤起原生App、x5库为最新版本,功能强大。项目地址: webView开源库 同时,该案例中,04问题反馈也记录了绝大多数实际开发中遇到的问题,如果还有其他的问题,也可以发送给我,我收集起来放到一起,方便后期查阅。 可以说,该开源库,以及附带的webView基础知识点,问题汇总,以及优化方案等笔记,相对来说比较系统而又全面的梳理webView的知识体系,相对而言也是比较实用的

WebView开源库终极方案

戏子无情 提交于 2019-12-05 16:40:37
目录介绍 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 1.4 WebView知识点 02.如何使用 2.1 如何引入 2.2 最简单使用 2.3 常用api 2.4 使用建议 2.5 异常状态类型区分 2.6 该库流程图 03.js调用 3.1 Java调用js方法 3.2 js调用java方法 3.3 js的调用时机分析 3.4 js交互原理分析 04.问题反馈 05.webView优化 06.关于参考 07.其他说明介绍 01.前沿说明 基于腾讯x5开源库,提高webView开发效率,大概要节约你百分之六十的时间成本。该案例支持处理js的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常error状态、支持视频播放并且可以全频、支持加载word,xls,ppt,pdf,txt等文件文档、发短信、打电话、发邮件、打开文件操作上传图片、唤起原生App、x5库为最新版本,功能强大。项目地址: webView开源库 同时,该案例中,04问题反馈也记录了绝大多数实际开发中遇到的问题,如果还有其他的问题,也可以发送给我,我收集起来放到一起,方便后期查阅。 可以说,该开源库,以及附带的webView基础知识点,问题汇总,以及优化方案等笔记,相对来说比较系统而又全面的梳理webView的知识体系,相对而言也是比较实用的

最火移动端跨平台方案盘点:React Native、weex、Flutter

三世轮回 提交于 2019-12-04 20:07:04
1、前言 跨平台一直是老生常谈的话题,cordova、ionic、react-native、weex、kotlin-native、flutter等跨平台框架的百花齐放,颇有一股推倒原生开发者的势头。 为什么我们需要跨平台开发? 本质上,跨平台开发是为了增加代码复用,减少开发者对多个平台差异适配的工作量,降低开发成本,提高业务专注的同时,提供比web更好的体验。嗯~通俗了说就是:省钱、偷懒。 目前移动端跨平台开发中,备受关注的方案大致归纳为以下几种情况: 1)react native、weex均使用JavaScript作为编程语言,目前JavaScript在跨平台开发中,可谓占据半壁江山,大有“一统天下”的趋势; 2)kotlin-native开始支持 iOS 和 Web 开发,(kotlin已经成为android的一级语言)也想尝试“一统天下”; 3)flutter是Google跨平台移动UI框架,Dart作为谷歌的亲儿子,毫无疑问Dart成为flutter的编程语言。作为巨头新生儿,在flutter官网也可以看出,flutter同样“心怀天下”(可支持Web端、Android端、iOS端等)。 本篇主要以react-native、weex、flutter,深入聊聊当前最火的这3种跨平台移动开发方案的实现原理、现状与未来。至于为什么只讲它们,因为对比ionic、phoneGap

webview

与世无争的帅哥 提交于 2019-12-04 15:07:07
url加载方式:webView.loadUrl( " http://139.196.35.30:8080/OkHttpTest/apppackage/test.html "); webViewClient: webViewClient主要帮助webView处理各种通知,请求事件 webViewClient常用方法: onPageStarted() 页面请求加载 onPageFinished() 页面请求完成 shouldOverriedUrlLoading 拦截url onReceivedError() 404,访问错误时回调:回调的时候可加载错误页面 webViewChrome: webViewChrome主要辅助webView处理 javascript 对话框,网站图标,网站title,加载进度等 webViewChrome常用方法: onJSAlert webView 不支持js的alter弹框,需要自己监听然后通过dialog弹框 onReceivedTitle() 获取网页标题 onReceivedIcon() 获取网页icon onProgressChanged() 加载进度回调 使用: https://blog.csdn.net/lowprofile_coding/article/details/77928614 onkeydown方法中返回true

WebView与JavaScript交互

巧了我就是萌 提交于 2019-12-03 23:53:20
在WebView中使用JavaScript   如果你想要载入的页面中用了JavaScript,你 必须 为你的WebView使能JavaScript。   一旦使能之后,你也可以自己创建接口在你的应用和JavaScript代码间进行交互。 前情提要:使能JavaScript   上一篇文章已经说过,可以通过 getSettings() 获得 WebSettings ,然后用 setJavaScriptEnabled() 使能JavaScript: WebView myWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled( true ); 绑定JavaScript与Android代码   当你为你的Android应用中的WebView专门开发一个网页应用时,你可以创建你的JavaScript代码和你的客户端的Android代码之间的接口。   比如,你可以用JavaScript代码调用Android代码中的方法,来展现一个对话框之类,而不是使用alert()方法(JS中的对话框方法)。   在JS和Android代码间绑定一个新的接口,需要调用

Android中Js与java的交互

拥有回忆 提交于 2019-12-03 15:32:51
在最近项目开发中频繁用到Js与Java的交互,今天把相关知识点整理出来,欢迎大家吐槽。啪啪啪~ 1、Js调用Java中的方法: a、对WebView进行设置 mWebView.addJavascriptInterface(new DmJavaScriptInterface(),"androidObject"); 在Js中androidObject就是DmJavaScriptInterface的一个对象,通过这个对象可以调用类中的相关方法 b、实现DmJavaScriptInterface类 final class DmJavaScriptInterface { DmJavaScriptInterface() { } @JavascriptInterface public void getPhoto() { Log.e(TAG,"js调用原生方法"); LsUIHelper.getInstance().showLsChoosePicListActivity(mContext, 13); } @JavascriptInterface public String getToken() { String token = getUserToken(mContext); // Log.e(TAG, "getToken token :=" + token); return token; }