您的位置:首页 > 移动开发

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

2016-04-26 19:36 148 查看
我只想说: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。知道真相的我眼泪掉下来啊。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: