安卓奇葩问题之:设置webView超时
我只想说:what a fucking day!
今天要做一个webView的超时功能,于是开始百度,一看貌似很简单啊,于是开始copy了下面的代码。
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");
}
}
下面,坑爹的就来了,运行发现报错:大概意思就是
if (TestJsActivity.this.mWebView.getProgress() < 100) 这行代码里的对webView的操作只能在同一个线程(犹豫其他需要,在主线程也对webView进行了操作),于是我就纠结了一天。 后来发现由于webView控件的回调方法onPageFinished()的特点,根本不需要加上面那行代码
oh,my god。知道真相的我眼泪掉下来啊。。。
安卓奇葩问题之:设置webView超时的更多相关文章
- 安卓APP承载网页(WebView)
安卓APP自身如何打开网页,如何制作一个简单的浏览器,WebView在其中将是一个重要的角色.WebView是一个基于WebKit引擎.展现Web页面的控件. Webview 是一个基于webkit引 ...
- C# 的tcp Socket设置自定义超时时间
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- 【开源项目13】Volley框架 以及 设置request超时时间
Volley提供了优美的框架,使android程序网络访问更容易.更快. Volley抽象实现了底层的HTTP Client库,我们不需关注HTTP Client细节,专注于写出更加漂亮.干净的RES ...
- android 中设置HttpURLConnection 超时并判断是否超时
设置超时: URL url1 = new URL(url); HttpURLConnection conn = (HttpURLConnection) url1.openConnection(); c ...
- oracle连接由于防火墙设置导致超时的问题
当应用程序使用数据库连接池进行数据连接时,防火墙的设置有可能会导致连接出现超时或者被重置的问题.当从数据库读数据的时候 有可能会 Connection timed out, 这是由于应用会缓存 ...
- iOS 设置connect超时
NSLock *theLock; [theLock lock]; int fd, error; struct sockaddr_in addr; ))<) { cout<<" ...
- 设置session超时
在web应用中,设置session超时有三种方法: 1.在web.xml文件中配置:单位是分钟,范围是针对本项目所有用户的session <session-config> <sess ...
- Dynamics CRM可以设置会话超时和非活动超时吗?
本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复266或者20171213可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- Retrofit2.0 设置 连接超时
Retrofit2.0 这个网络请求框架使用了很久了,最近一次出现一个小插曲. 有一个接口,返回的数据量因为业务的原因 会返回很大的数据量,此时网络不大好的情况下,会出现请求失败的情况 也就是回调了 ...
随机推荐
- XE6移动开发环境搭建之IOS篇(7):在Mac OSX 10.8中安装Xcode4.6.3(有图有真相)
网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 在安装Xcode前, ...
- linux下的磁盘和文件系统管理
一.硬盘分区知识 1.分区类型 硬盘分区一共有3种:主分区.扩展分区和逻辑分区.扩展分区只不过是逻辑分区的“容器”,实际上只有主分区和逻辑分区进行数据存储.在一块硬盘上最多只能有4个主分区,可以另外建 ...
- MXS 编辑器外观
Tool > Open User Options File # Give symbolic names to the set of colours used in the standard st ...
- teamviewer 过期解决办法
参考资料: http://blog.csdn.net/z249683156/article/details/41842271
- (转)这个API很“迷人”——新的Fetch API
原文:https://hacks.mozilla.org/2015/03/this-api-is-so-fetching 原标题是This API is So Fetching,Fetching也可以 ...
- Python 前端之JS
JavaScript由浏览器编译运行 JS的导入方式有两种,一种直接定义,第二种通过src引入:可以存放在<head>头部,但是强烈建议放在<body>的最下面,因为如果你引入 ...
- information_schema系列二(列,列权限,事件,存储引擎)
这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点点的受益. 1:COLUMNS 老规矩.查一下这个表,看一下记录,由于这个是看表 ...
- APP分发渠道的竞争分析
一. 最近几年,手机APP市场发展非常迅速,随着手机的硬件水平的不断升级,大量资本涌入,越来越多的开发者从桌面平台开发转移到移动平台开发,面对数以万计的手机APP,如何推广自己的APP成了难题,APP ...
- Xshell
http://baike.baidu.com/link?url=5lc5IxVVauitYSbqlOXJBvrvM3qVfMhzz6x_xu2cOMb108Ln9Wk7iJ3f46vG0kBninKw ...
- Repeater展示表格
1.可以不用table展示数据 <asp:Repeater ID="Repeater1" runat="server"> <ItemTempl ...