1. package com.test.js2java;
  2. import java.util.Timer;
  3. import java.util.TimerTask;
  4. import android.app.Activity;
  5. import android.graphics.Bitmap;
  6. import android.os.Bundle;
  7. import android.os.Handler;
  8. import android.os.Message;
  9. import android.util.Log;
  10. import android.view.Window;
  11. import android.webkit.WebSettings;
  12. import android.webkit.WebView;
  13. import android.webkit.WebViewClient;
  14. public class TestJsActivity extends Activity {
  15. private long timeout = 5000;
  16. private WebView mWebView;
  17. private Handler mHandler = new Handler();
  18. private Timer timer;
  19. @Override
  20. public void onCreate(Bundle icicle) {
  21. super.onCreate(icicle);
  22. requestWindowFeature(Window.FEATURE_NO_TITLE);
  23. setContentView(R.layout.main);
  24. mWebView = (WebView) findViewById(R.id.webview);
  25. WebSettings webSettings = mWebView.getSettings();
  26. webSettings.setJavaScriptEnabled(true);
  27. webSettings.setAllowFileAccess(true);
  28. mWebView.setWebViewClient(new WebViewClient() {
  29. /*
  30. * 创建一个WebViewClient,重写onPageStarted和onPageFinished
  31. *
  32. *
  33. * onPageStarted中启动一个计时器,到达设置时间后利用handle发送消息给activity执行超时后的动作.
  34. *
  35. */
  36. @Override
  37. public void onPageStarted(WebView view, String url, Bitmap favicon) {
  38. Log.d("testTimeout", "onPageStarted...........");
  39. // TODO Auto-generated method stub
  40. super.onPageStarted(view, url, favicon);
  41. timer = new Timer();
  42. TimerTask tt = new TimerTask() {
  43. @Override
  44. public void run() {
  45. /*
  46. * 超时后,首先判断页面加载进度,超时并且进度小于100,就执行超时后的动作
  47. */
  48. if (TestJsActivity.this.mWebView.getProgress() < 100) {
  49. Log.d("testTimeout", "timeout...........");
  50. Message msg = new Message();
  51. msg.what = 1;
  52. mHandler.sendMessage(msg);
  53. timer.cancel();
  54. timer.purge();
  55. }
  56. }
  57. };
  58. timer.schedule(tt, timeout, 1);
  59. }
  60. /**
  61. * onPageFinished指页面加载完成,完成后取消计时器
  62. */
  63. @Override
  64. public void onPageFinished(WebView view, String url) {
  65. // TODO Auto-generated method stub
  66. super.onPageFinished(view, url);
  67. Log.d("testTimeout", "onPageFinished+++++++++++++++++++++++++");
  68. Log.d("testTimeout", "+++++++++++++++++++++++++"
  69. + TestJsActivity.this.mWebView.getProgress());
  70. timer.cancel();
  71. timer.purge();
  72. }
  73. });
  74. 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");
  75. }
  76. }

其中要注意的是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全部加载完毕后才调用。

webview--网络超时的更多相关文章

  1. NSURLConnection 网络超时的那些事(转别人整理的)

    NSURLConnection 网络超时的那些事(转别人整理的) 在ios平台上做网络开发最常用的两个类: NSMutableURLRequest *urlRequest = [[NSMutableU ...

  2. Charles模拟网络请求页面的网络超时测试

    正常情况下网络连接超时可能的原因有以下几点: 1.网络断开,手动的关掉了网络的连接 2.网络阻塞,导致你不能在程序默认等待时间内得到回复数据包. 3.网络不稳定,网络无法完整传送服务器信息. 4.系统 ...

  3. pip安装拓展包--网络超时/Read timed out问题

    pip安装拓展包--网络超时/Read timed out问题 解决方案:切换镜像源(墙皮太厚) 在后面加上: -i https://pypi.douban.com/simple example: p ...

  4. (转)HttpURLConnection中设置网络超时

    转:http://www.xd-tech.com.cn/blog/article.asp?id=37 Java中可以使用HttpURLConnection来请求WEB资源.HttpURLConnect ...

  5. 关于AFNetworking访问网络超时的设置

    前言:有的猿会发现在设置AFNetworking访问网络超时时,直接用self.manager.requestSerializer.timeoutInterval =10.f不起作用. 解决办法:经过 ...

  6. android网络编程注意事项之一:移动网络下,防止网络超时甚至连接不上,解决办法--为网络请求设置代理

    Android应用程序访问互联网资源时,在Wifi的情况下处理网络连接按照上文所讲述的方法步骤即可顺利实现:但如果当前Android设备的联网方式是通过移动运营商的网络服务为中转,间接访问的互联网资源 ...

  7. WebView(网络视图)的两种使用方式

    WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:第一种方法的步骤:1.在要Activity中实例化W ...

  8. 当pip安装因为网络超时而无法安装的时候慢

    2.4 尝试pip --default-timeout=1000 install  https://download.pytorch.org/whl/cu100/torch-1.1.0-cp36-cp ...

  9. 安卓奇葩问题之:设置webView超时

    我只想说:what a fucking day! 今天要做一个webView的超时功能,于是开始百度,一看貌似很简单啊,于是开始copy了下面的代码. import java.util.Timer; ...

  10. 4.2.1 网络请求之HTTP

    HTTP请求&响应:(常用的只有Post与Get,还有Head/put/delete/connect/options/trace) Get&Post(建议用post规范参数传递方式,并 ...

随机推荐

  1. 跟上节奏 大数据时代十大必备IT技能(转)

    新的想法诞生新的技术,从而造出许多新词,云计算.大数据.BYOD.社交媒体……在互联网时代,各种新词层出不穷,让人应接不暇.这些新的技术,这些新兴应用和对应的IT发展趋势,使得IT人必须了解甚至掌握最 ...

  2. C中scanf/gets/fgets的区别

    功能:同样是获取字符串. 区别: scanf 遇到空格/回车/Tab键认为输入结束, 但是空格/回车/Tab键仍会留在输入的缓冲区中.常见的是使用getchar(),处理scanf的后事:如果想要清除 ...

  3. jquery轻松操作CSS样式

    $(this).click(function(){  if($(this).hasClass(“zxx_fri_on”)){    $(this).removeClass(“zxx_fri_on”); ...

  4. centos启动流程[转]

    启动流程概览 在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯: init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行 ...

  5. 论文阅读之:Is Faster R-CNN Doing Well for Pedestrian Detection?

    Is Faster R-CNN Doing Well for Pedestrian Detection? ECCV 2016   Liliang Zhang & Kaiming He 原文链接 ...

  6. SharePoint List 查看器

    using Microsoft.SharePoint; using System; using System.Collections.Generic; using System.ComponentMo ...

  7. 深入浅出Attribute (转载)

    原文地址:http://blog.csdn.net/FantasiaX/article/details/1627694 正文: 什么是Attribute?Attribute是干什么使的?Attribu ...

  8. 关于CSS Hack

    CSS Hack由于不同厂商的浏览器,如Internet Explorer,Safari,Mozilla Firefox,Chrome 等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS ...

  9. linux包之gdb之gdb命令与core文件产生

    gdb-7.2-64.el6_5.2.x86_64/usr/bin/gcore/usr/bin/gdb/usr/bin/gdb-add-index/usr/bin/gdbtui/usr/bin/gst ...

  10. sublime个人快捷键

    ctrl+alt+f  =  代码格式化(html,js) ctrl+d  =  选中相同内容 alt+shift+w  =  为内容添加新标签 ctrl+shift+a = 选择标签内的内容(再按一 ...