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. 新手教程之:循环网络和LSTM指南 (A Beginner’s Guide to Recurrent Networks and LSTMs)

    新手教程之:循环网络和LSTM指南 (A Beginner’s Guide to Recurrent Networks and LSTMs) 本文翻译自:http://deeplearning4j.o ...

  2. JVM 虚拟化

    http://www.infoq.com/cn/news/2015/05/java20-multitenant-jvm http://2016.qconshanghai.com/presentatio ...

  3. UML开始,OOA与OOD以及一个网站

    1.Object-Oriented Analysis(面向对象分析方法)是确定需求或者业务的角度,按照面向对象的思想来分析业务 2.面向对象设计(Object-Oriented Design,OOD) ...

  4. C# 数组,ArrayList与List对象的区别

    在C#中,当我们想要存储一组对象的时候,就会想到用数组,ArrayList,List这三个对象了.那么这三者到底有什么样的区别呢? 我们先来了解一下数组,因为数组在C#中是最早出现的. 数组 数组有很 ...

  5. Java中的简单工厂模式

    举两个例子以快速明白Java中的简单 工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就 ...

  6. 【转】Asp.net中时间格式化的6种方法详细总结

    1. 数据控件绑定时格式化日期方法: 代码如下: <asp:BoundColumn DataField="AddTime" HeaderText="添加时间&quo ...

  7. android dimens 读取 px&dp问题

    1.dimens.xml文件:     <resources> <dimen name="area_margin_top">100dp</dimen& ...

  8. struts2.0的工作原理

    struts2并不是一个陌生的web框架,它是以Webwork的设计思想为核心,吸收struts1的优点,可以说 struts2是struts1和Webwork结合的产物. struts2 的工作原理 ...

  9. Oracle查找表的外键引用关系

    Oracle查找表的外键引用关系 select t1.table_name, t2.table_name as "TABLE_NAME(R)", t1.constraint_nam ...

  10. SqlServer参数化脚本与自动参数化(简单参数化)

    如果执行不带参数的SQL语句,SQL Server会在内部对该语句进行参数化以增加将其与现有执行计划相匹配的可能性.此过程称为简单参数化(在SQL Server 2000中,称为自动参数化),最终起到 ...