Android WebView介绍

webview  ,用网页来布局。  Android    webview  是基于  webkit  内核,不过他的运行效果和  firefox  上如出一辙,因此写的时候都是先用  firefox  测试,测试  OK  了再放到程序里面看效果,基本上不会有什么问题。其实  android    webview    iphone    webview  差很少,  iphone  上的  webview    android  上的强大多了。
谈一下研究  webview  的一些成果:
 
一.     加载资源的速度不慢,可是资源多了,就很慢。图片、  css    js    html  这些资源每一个大概须要  10-200ms  ,通常都是  30ms    ok  了。若是一个页面上的资源不少,就很浪费时间。
 
二.     Js    css  的执行速度。开始的时候,个人页面都是用  js  生成  DOM  ,添加样式等也用  js  添加。后来发现,加载一个页面竟然要  5-6  秒。而后我就怀疑是否是  js  的执行效率不高,而后就把能用  css  的地方都用  css  ,能直接写到  html  上的就不用  js  动态生成。结果,速度并无多大的提高,最多提高了  1  秒。看来,  Js  的执行速度虽然比不上  css  ,可是还不至于慢到那种程度。那会是什么缘由使得页面加载速度这么慢?通过仔细的排查,最终发现,是由于我用了  jQuery  框架。
Webview  加载页面的顺序是这样的:先加载  html  ,而后从里面解析出  css    js  文件和页面上写死的图片资源进行加载,若是  webkit  的缓存里面有,就不加载。加载完这些资源以后,就进行  css  的渲染和  js  的执行。  Css  的渲染通常不须要很长时间,几十毫秒就  ok  。关键是  js  的执行,若是用了  jQuery  ,则执行起来须要  5-6  秒。而在这段时间,若是不在  webview  里设置背景,网页部分是白色的,很难看。这是一个很糟糕的用户体验。因此若是用网页布局程序,最好别用很大的  js  框架。
 
三.      网页和  Java  之间的互调。这个功能是  iphone  里面就有的,网上也有不少资料,能够告诉咱们怎么作,这些都是很简单、很基本的。我研究了一段时间,总结一下:
  1.   Java  调用  js  里面的函数,速度并不使人满意,大概一次一两百毫秒吧,若是要作交互性很强的事情,这种速度会让人疯掉的。而反过来就不同了,  js  去调  java  的方法,速度很快,基本上  40-50  毫秒一次。因此尽可能用  js  调用  java  方法,而不是  java  去调用  js  函数。
 2.   Java  调用  js  的函数,没有返回值,而  Js  调用  java  方法,能够有返回值。返回值能够是字符串,也能够是对象。若是是字符串,有个很讨厌的问题,第 3  点我会讲的。若是是对象,这个对象会被转换为  js  的对象,直接能够访问里面的方法。可是我不推荐  java  返回给  js  的是对象,除非是必须。由于  js  收到  java  返回的对象,会产生一些交换对象,而若是这些对象的数量增长到了  500    600  以上,程序就会出问题。因此尽可能返回基本数据类型或者字符串。
3.   Js  调用  java  的方法,返回值若是是字符串,你会发现这个字符串是  native  的,不能对它进行一些修改操做,好比想对它  substr  ,取不到。怎么解决呢?转成  locale  的。使用  toLocaleString()  函数就能够了。不过这个函数的速度并不快,转化的字符串若是不少,将会很耗费时间。
 
 
四.         网页上拖动元素。网页上有一个  div  ,想要拖动它到另一个地方,怎么作?若是用  PC  上的网页作法,监听  onmousedown    onmousemove    onmouseup  就能够了。可是在手机上,事件模型就不同了。在网页上点击,拖动,而后释放,手离开屏幕的时候,  webview  才会触发  onmousedown   onmousemove    onmouseup  事件。因此,要想拖动,不能这么作。这个问题困扰我很长时间,后来发现  iphone  上的作法,才解决了。  Iphone  上的  webview  有专为触摸屏设计的事件  ontouchstart    ontouchmove    ontouchend  ,这几个事件的响应是实时的,就能解决拖动的问题了。
 
五.         一些小问题。  Webview  里面的网页,若是有  input  ,须要输入,可是点上去却没反应,输入法不出来。这种状况是由于  webview  没有获取焦点。须要在  java  里面给  webview  设置一下  requestFocus()  就好了。
 
六.         Android  上的  webview    iphone    webview  区别。目前为止,我发现的区别有这么几个:
1    Android  上,  webview  不支持多点触控,没有  ongesture  系列事件,而  iphone  上有。
       2    Android  上的  webview  不支持透明,  iphone  上能够
相关文章
相关标签/搜索