Android WebView的加载超时处理
2013-02-27 18:19
525 查看
package com.test.js2java; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Window; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class TestJsActivity extends Activity { private long timeout = 5000; private WebView mWebView; private Handler mHandler = new Handler(); private Timer timer; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); mWebView = (WebView) findViewById(R.id.webview); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setAllowFileAccess(true); mWebView.setWebViewClient(new WebViewClient() { /* * 创建一个WebViewClient,重写onPageStarted和onPageFinished * * * onPageStarted中启动一个计时器,到达设置时间后利用handle发送消息给activity执行超时后的动作. * */ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d("testTimeout", "onPageStarted..........."); // TODO Auto-generated method stub super.onPageStarted(view, url, favicon); timer = new Timer(); TimerTask tt = new TimerTask() { @Override public void run() { /* * 超时后,首先判断页面加载进度,超时并且进度小于100,就执行超时后的动作 */ if (TestJsActivity.this.mWebView.getProgress() < 100) { Log.d("testTimeout", "timeout..........."); Message msg = new Message(); msg.what = 1; mHandler.sendMessage(msg); timer.cancel(); timer.purge(); } } }; timer.schedule(tt, timeout, 1); } /** * onPageFinished指页面加载完成,完成后取消计时器 */ @Override public void onPageFinished(WebView view, String url) { // TODO Auto-generated method stub super.onPageFinished(view, url); Log.d("testTimeout", "onPageFinished+++++++++++++++++++++++++"); Log.d("testTimeout", "+++++++++++++++++++++++++" + TestJsActivity.this.mWebView.getProgress()); timer.cancel(); timer.purge(); } }); mWebView.loadUrl("http://image.baidu.com/i?ct=201326592&cl=2&nc=1&lm=-1&st=-1&tn=baiduimage&istype=2&fm=index&pv=&z=0&word=%D7%C0%C3%E6&s=0"); } }
其中要注意的是onPageFinished的两点,第一点,官方是这样解释的:
Notify the host application that a page has finished loading. This method is called only for main frame. When onPageFinished() is called, the rendering picture may not be updated yet. To get the notification for the new Picture, use
onNewPicture(WebView, Picture).
也就是说,程序只认为DOM加载完成就完成了,正在加载的图片不在这个范围之内。
第二点是,如果在JS文件中又动态去加载另一JS,onPageFinished方法会在所有的JS全部加载完毕后才调用。
相关文章推荐
- android webview处理加载超时
- Android WebView的加载超时处理
- Android WebView的加载超时处理
- Android WebView的加载超时处理
- 【Android基础学习】webview加载网页,tel协议不会调出拨号盘?该如何处理
- Android中一个新闻项目中点击新闻,webview加载不出来,总报连接超时
- Android WebView加载网页失败处理
- Android: WebView加载网页的几种方式及网络异常处理
- Android 使用WebView加载含有Canvas的页面截屏处理
- webview 笔记二(android和js交互、包括链接跳转常见问题处理,加载监视,拦截Url等)
- Android的WebView加载网页的几种方式及网络异常处理
- Android webview 加载 html页面 实现 不同分辨率 不同 dpi 缩放自适应处理
- Android下WebView的图片适配加载与文字自动换行处理
- android 的webView加载h5,和h5的交互(java和JavaScript的交互)
- Android SwipeRefreshLayout谷歌官方下拉刷新加载WebView网页介绍
- [置顶] Android使用WebView加载图片防止OutOfMemoryError
- android webview的点击截取判断处理
- Android WebView无法加载本地html文件的解决方法
- Android Webview的postUrl与loadUrl加载页面
- Android中WebView遇到页面加载一半但是监听的是加载完成