- 浏览: 661547 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
ZHOU452840622:
少了一个构造函数 晕
Android画图之Matrix(一) -
ZHOU452840622:
06-30 17:39:19.193: E/AndroidRu ...
Android画图之Matrix(一) -
ZHOU452840622:
为什么报错哦
Android画图之Matrix(一) -
悬空90:
只是获取activity的名字而已, 没有实例。 反射 ...
获取屏幕上正在显示的activity -
night_iv:
重写下面两个函数EditText完全作废,点击没有反应没有光标 ...
Android自由选择TextView的文字
最近做的项目大量用到了 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 上可以。
暂时就能想到这么些,还有很多以后再补充吧。
评论
webview里面加一个button 如何实现按下的效果呢
说明下:我的webview里面所有数据是自己弄的,即
Webview.WebView.loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)
需要在特定地方加入BUTTON ,发现PC上的可以有按下效果
但是android webview 就没有按下效果了 和解?
异步加载+Lazy Load
java中:
class A{
public int add(int a,int b){
return a+b;
}
.....;
}
通过addJavascriptInterface(new A(),"A");将JAVA的class A的对象与js绑定,这个对象在js中就叫做A,那么在js中就可以使用A这个对象了,这个对象也是全局对象即window.A,在js中可以使用A.add(2,3)。
以上是对webview的js扩展做了一个简单的介绍,那么现在遇到这样一个问题,js中我们要去添加一个对象,这个对象的一个方法需要接收回调函数作为参数,那在java那边怎么去处理,js传进来的回调函数呢?
例如:
js:
A.test(function(x){var y = x;},"hello");
这句js的代码就是说test这个方法要接收一个函数当做回调来处理,和一个字符串。
那么在JAVA中去扩展这个A这个对象的时候test这个方法改怎么去接收传进来的回调函数呢?
例如:
JAVA:
class A{
public void test(XXX,String str){//test中的 XXX是用来接收js传入的function(x){var y = x;},那么XXX应该怎么表示它的类型??????
.........;//函数体里面要根据状态去执行js传进来的function(x){var y = x;},又该怎么执行???
}
}
就我目前所知,Java跟Javascript之间能传递的参数,只能是字符串,如果参数是一个对象,此对象也会被toString成字符串,所以,要传回调函数,貌似是不可行的。
java中:
class A{
public int add(int a,int b){
return a+b;
}
.....;
}
通过addJavascriptInterface(new A(),"A");将JAVA的class A的对象与js绑定,这个对象在js中就叫做A,那么在js中就可以使用A这个对象了,这个对象也是全局对象即window.A,在js中可以使用A.add(2,3)。
以上是对webview的js扩展做了一个简单的介绍,那么现在遇到这样一个问题,js中我们要去添加一个对象,这个对象的一个方法需要接收回调函数作为参数,那在java那边怎么去处理,js传进来的回调函数呢?
例如:
js:
A.test(function(x){var y = x;},"hello");
这句js的代码就是说test这个方法要接收一个函数当做回调来处理,和一个字符串。
那么在JAVA中去扩展这个A这个对象的时候test这个方法改怎么去接收传进来的回调函数呢?
例如:
JAVA:
class A{
public void test(XXX,String str){//test中的 XXX是用来接收js传入的function(x){var y = x;},那么XXX应该怎么表示它的类型??????
.........;//函数体里面要根据状态去执行js传进来的function(x){var y = x;},又该怎么执行???
}
}
我用webkit load一个网页,这个网页中使用到“window.location.hash = "c2";”的js代码。页面载入后,第一次点击“定位”按钮,location成功定位到c2锚点,但是之后点击“定位”按钮就没有任何反应了。
每次都这样,程序运行时都可以定位,之后的按钮就怎么点击都不反应了
请问是什么原因??
代码请看我的问题链接http://www.eoeandroid.com/thread-55013-1-1.html
ongesture是默认支持的,由如下三个组成:ontouchstart 、 ontouchmove 、 ontouchend
在webview里里面的js引擎和浏览器的应该是一个吧?
浏览器里访问用jquery的网站速度还可以啊
我觉得也是,不过如果要操作Document元素那就不一定了,可能会很影响效率!
楼主总结的很有见地!
shouldOverrideUrlLoading方法指明了在loadUrl的时候,程序应该有怎样的行为。
如果是返回false,则url由当前的webview载入,如果是true,则交给当前程序来决定如何处理。
了解了,谢谢.
shouldOverrideUrlLoading方法指明了在loadUrl的时候,程序应该有怎样的行为。
如果是返回false,则url由当前的webview载入,如果是true,则交给当前程序来决定如何处理。
webView.loadUrl("http://localhost/dici/property/listPropertyInfoByDeviceUnit.action"); //webView.loadUrl("file:///android_asset/listPropertyInfoByDeviceUnit.html"); webView.loadUrl("javascript:getValidationJS()");
你好,想请教个问题,我现在用webView.loadUrl() 装载的是动态页面,不是本地assets中的页面,然后在 webView中调用 js 好像不行,我想问下 webView能调用动态页面中的js方法吗?
谢谢了。
搞定了 原来我在页面用js回调android中的java方法时不能传Integer,把java方法的参数类型改成String 就ok了。
webView.loadUrl("http://localhost/dici/property/listPropertyInfoByDeviceUnit.action"); //webView.loadUrl("file:///android_asset/listPropertyInfoByDeviceUnit.html"); webView.loadUrl("javascript:getValidationJS()");
你好,想请教个问题,我现在用webView.loadUrl() 装载的是动态页面,不是本地assets中的页面,然后在 webView中调用 js 好像不行,我想问下 webView能调用动态页面中的js方法吗?
谢谢了。
一样是可以使用的,不过有个javascript开关需要打开,类似webView.getSettings().setJavaScriptEnabled(true);这样子。
webView.loadUrl("http://localhost/dici/property/listPropertyInfoByDeviceUnit.action"); //webView.loadUrl("file:///android_asset/listPropertyInfoByDeviceUnit.html"); webView.loadUrl("javascript:getValidationJS()");
你好,想请教个问题,我现在用webView.loadUrl() 装载的是动态页面,不是本地assets中的页面,然后在 webView中调用 js 好像不行,我想问下 webView能调用动态页面中的js方法吗?
谢谢了。
我说的及时响应就是指一进入应用立即就把页面显示出来。应用加载以后,执行功能的时候,基本上不会有什么延迟的。
另外,2.2的系统对webkit做过优化,大概比以前的版本快3倍左右。
这样啊。不用jquery以后速度快了很多么?
你的js大概有多少k?
我做的页面,不用jquery以后,再加上了一些优化,页面几乎是瞬间加载,1秒不到。每个页面的js大概有二十几K,都是单个的function,没有加载的时候执行的代码。
我说的及时响应就是指一进入应用立即就把页面显示出来。应用加载以后,执行功能的时候,基本上不会有什么延迟的。
另外,2.2的系统对webkit做过优化,大概比以前的版本快3倍左右。
这样啊。不用jquery以后速度快了很多么?
你的js大概有多少k?
我说的及时响应就是指一进入应用立即就把页面显示出来。应用加载以后,执行功能的时候,基本上不会有什么延迟的。
另外,2.2的系统对webkit做过优化,大概比以前的版本快3倍左右。
发表评论
-
Android NFC内部机制分析
2012-08-06 19:48 3一、初始 一般需要使用nfc ... -
Android NFC简介
2012-08-03 11:31 4373目录: Android NFC ... -
Android放大镜的实现
2011-02-24 20:29 14329快三个月了没写博客了,因为工作调动,很多经验、心得都没 ... -
Android简单的圆盘形菜单
2010-12-01 17:10 15510今天偶然看到一个圆盘形的菜单,还可以转动,感觉挺 ... -
Android的3D旋转
2010-11-29 12:27 23212见过没有用opengl的3D动画,看了一下,是 ... -
让自己的Android应用支持appwidget
2010-11-26 13:25 7854经常看到一些教程教你如何写appwidget, ... -
ConditionVariable的用法
2010-11-07 21:35 8758线程操作经常用到wait和notify,用起来稍显 ... -
Android自定义长按事件
2010-11-06 20:34 44724Android系统自带了长按事件,setOnLongC ... -
Android获取应用程序的大小
2010-10-22 23:53 11258今天碰到个问 ... -
Android获取其他包的Context实例然后干坏事
2010-09-12 14:55 25141Android中有Context ... -
android监听文件和目录的创建删除移动等事件
2010-09-11 21:18 13682android.os下的FileObserver类 ... -
解决android自定义标题栏充满的问题
2010-09-10 15:27 10803一个接着一个的activity,写啊写,调啊调 ... -
Android中用AsyncTask简单实现多线程
2010-09-07 14:11 5237一般情况下在an ... -
Android自由选择TextView的文字
2010-09-02 15:47 19425用过EditText的都 ... -
NDK入门、提高和实战
2010-08-04 18:25 3300网上也有一些对NDK ... -
linux下用adb连接手机的问题解决
2010-08-02 16:17 6070在linux里面,模拟器可以直接识别,使用adb也 ... -
Android系统事件的recycle原理
2010-07-22 19:07 6263最近封装一些功能 ... -
Android画图之Matrix(二)
2010-07-15 22:01 34079上一篇Android画图之Matrix(一) 讲 ... -
Android画图之Matrix(一)
2010-07-13 22:54 32913Matrix ,中文里叫矩阵, ... -
Android画图之Bitmap(二)
2010-07-11 22:21 10835前面一篇博文Android画图之Bitma ...
相关推荐
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序内部加载和显示网页内容...对于“8.webview加载网页”这个文件,可能是具体实现这些功能的代码示例,进一步深入研究将有助于加深对WebView的理解。
在`TestWebview`这个测试项目中,我们可以深入研究这些问题,包括检查WebView的设置、网页的HTML结构以及JavaScript代码,以找出最佳的解决策略。这可能涉及到对WebView的配置进行调试,如启用JavaScript支持,设置...
搜索很多资料后发现很多问题,都是关键代码片段,因为每个项目每个人产生的问题不同,Video在webview中加载不出来原因很多,可能是客户端少了参数,也可能是前端出了问题,经过研究后对Android WebView 加载H5Video...
这个“android webview开发应用”显然提供了相关的源代码,为开发者提供了一个学习和研究的实例。以下是一些关于Android WebView开发的关键知识点: 1. **WebView介绍**:WebView是Android SDK中的一个类,它继承自...
通过研究这个`WebViewJS`源码,开发者可以了解到如何在实际应用中实现WebView与JavaScript的通信,以及如何处理相关的安全问题。对于想要提升Android应用功能和用户体验的开发者来说,这是一个很好的学习资源。
在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在应用程序内嵌入网页内容,实现与...在`webView_test`这个项目中,开发者已经提供了一个示例,可以下载并研究其代码,以更好地理解这些概念和实践。
在Android开发中,Webview是一个非常重要的组件,它允许开发者在应用程序中嵌入网页内容,实现与网页的交互。...通过对源代码的深入研究,可以掌握这两项技术的结合使用,为你的Android开发带来更多的可能性。
### Android WebView:融合原生与Web的桥梁 ...无论是用于简化应用开发流程,还是增强用户体验,`WebView`都是值得深入研究和掌握的核心组件。希望本文能为您的Android应用开发之旅带来新的灵感和实践指导。
在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在应用程序内嵌入网页内容,实现类似浏览器的功能。WebView能够加载HTML、CSS、...这些更高级的功能可以通过进一步研究WebView的相关API和特性来实现。
"AndroidWebView中实现WebSocket通信" 在 Android 的 WebView 中实现 WebSocket 通信是当前移动端应用开发中的一个热门话题。WebSocket 是 HTML5 规范中的一项技术,可以实现客户端与服务器之间的实时双向通信。在...
通过研究这些代码示例,开发者可以更好地理解`WebView`在实际应用中的各种用法,并在自己的项目中灵活运用。`WebView`是一个强大且功能丰富的组件,熟练掌握其使用技巧对Android开发者来说至关重要。
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,实现与网页的交互。...通过深入研究和实践,开发者可以掌握在Android应用中集成网页内容的技巧,提升应用的功能性和用户体验。
在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在应用程序内嵌入网页内容,实现类似浏览器的功能。...通过研究这些资源,你可以深入学习和掌握Android WebView与搜索框的结合使用。
本压缩包"安卓浏览器WebViewJSHTML5相关-androidwebview加载本地html.zip"提供了关于如何在Android中使用WebView加载本地HTML文件的相关示例和资料。 首先,我们要理解WebView的基本用法。在Android中,WebView是`...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容。当我们加载一个网页时,尤其是在网络状况不佳的情况下,用户可能需要等待一段时间,此时为了提供更好的用户体验,通常会显示...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,实现与网页的交互。本文将深入探讨如何实现一个自定义的WebView文本选择弹框,以替代系统默认的样式,提供更个性化的用户体验...
在Android应用程序开发中,WebView是不可或缺的一部分,它允许在应用内部加载和显示网页内容。然而,WebView也成为了安全问题的重灾区,因为它可能被攻击者利用来实施各种攻击。以下是一份详细的Android WebView安全...
在Android开发中,WebView是一个非常重要的组件,它允许开发者在应用程序内部嵌入一个网页浏览器,使得用户可以在不离开应用的情况下浏览网页内容。本资源“Android源码——WebViewJS应用源码_new_21.7z”显然是一个...