WebView的超时处理

来源:互联网 发布:sql注入攻击 epub 编辑:程序博客网 时间:2024/04/30 14:53
main.xml如下:
html代码


  • <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  • xmlns:tools="http://schemas.android.com/tools"
  • android:layout_width="match_parent"
  • android:layout_height="match_parent">
  • <WebView
  • android:id="@+id/webView"
  • android:layout_width="fill_parent"
  • android:layout_height="fill_parent"
  • android:layout_centerInParent="true"
  • />
  • </RelativeLayout>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <WebView android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" /></RelativeLayout>
MainActivity如下:
java代码


  • packagec.c;
  • importjava.util.Timer;
  • importjava.util.TimerTask;
  • importandroid.app.Activity;
  • importandroid.graphics.Bitmap;
  • importandroid.os.Bundle;
  • importandroid.os.Handler;
  • importandroid.os.Message;
  • importandroid.view.KeyEvent;
  • importandroid.webkit.WebView;
  • importandroid.webkit.WebViewClient;
  • /**
  • * Demo描述: WebView超时的处理
  • */
  • publicclassMainActivity extendsActivity {
  • privateTimer mTimer;
  • privateWebView mWebView;
  • privateTimerTask mTimerTask;
  • privatefinalintTIMEOUT = 10000;
  • privatefinalintTIMEOUT_ERROR = 9527;
  • @Override
  • publicvoidonCreate(Bundle savedInstanceState) {
  • super.onCreate(savedInstanceState);
  • setContentView(R.layout.main);
  • init();
  • }
  • privateHandler mHandler = newHandler() {
  • publicvoidhandleMessage(Message msg) {
  • if(msg.what == TIMEOUT_ERROR) {
  • System.out.println("===》 收到消息: webView超时");
  • }
  • };
  • };
  • privatevoidinit() {
  • mWebView = (WebView) findViewById(R.id.webView);
  • mWebView.getSettings().setJavaScriptEnabled(true);
  • mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
  • mWebView.getSettings().setSupportZoom(true);
  • mWebView.getSettings().setDomStorageEnabled(true);
  • mWebView.getSettings().setAllowFileAccess(true);
  • mWebView.getSettings().setPluginsEnabled(true);
  • mWebView.getSettings().setUseWideViewPort(true);
  • mWebView.getSettings().setBuiltInZoomControls(true);
  • mWebView.getSettings().setLoadWithOverviewMode(true);
  • mWebView.requestFocus();
  • mWebView.loadUrl("your url");
  • mWebView.setWebViewClient(newWebViewClient() {
  • @Override
  • publicbooleanshouldOverrideUrlLoading(WebView view, String url) {
  • returnsuper.shouldOverrideUrlLoading(view, url);
  • }
  • @Override
  • publicvoidonLoadResource(WebView view, String url) {
  • super.onLoadResource(view, url);
  • }
  • @Override
  • publicvoidonPageStarted(WebView view, String url, Bitmap favicon) {
  • super.onPageStarted(view, url, favicon);
  • System.out.println("======> onPageStarted 开始加载");
  • mTimer = newTimer();
  • mTimerTask = newTimerTask() {
  • @Override
  • publicvoidrun() {
  • // 在TIMEOUT时间后,则很可能超时.
  • // 此时若webView进度小于100,则判断其超时
  • // 随后利用Handle发送超时的消息
  • System.out.println("======> mWebView.getProgress()="+ mWebView.getProgress());
  • if(mWebView.getProgress() < 100) {
  • Message msg = newMessage();
  • msg.what = TIMEOUT_ERROR;
  • mHandler.sendMessage(msg);
  • if(mTimer != null) {
  • mTimer.cancel();
  • mTimer.purge();
  • }
  • }
  • if(mWebView.getProgress() == 100) {
  • System.out.println("======> 未超时");
  • if(mTimer != null) {
  • mTimer.cancel();
  • mTimer.purge();
  • }
  • }
  • }
  • };
  • mTimer.schedule(mTimerTask, TIMEOUT, 1);
  • }
  • @Override
  • publicvoidonPageFinished(WebView view, String url) {
  • super.onPageFinished(view, url);
  • System.out.println("======> onPageFinished 加载完成");
  • if(mTimer != null) {
  • mTimer.cancel();
  • mTimer.purge();
  • }
  • }
  • });
  • }
  • // 处理Back键
  • @Override
  • publicbooleanonKeyDown(intkeyCode, KeyEvent event) {
  • if(keyCode == event.KEYCODE_BACK && mWebView.canGoBack()) {
  • mWebView.goBack();
  • returntrue;
  • }
  • returnsuper.onKeyDown(keyCode, event);
  • }
  • }
原文链接:http://www.eyeandroid.com/thread-14157-1-1.html
原创粉丝点击