WebView的超时处理

来源:互联网 发布:js中的单例模式 编辑:程序博客网 时间:2024/04/30 13:44

main.xml如下:

<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如下:

package c.c;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.view.KeyEvent;import android.webkit.WebView;import android.webkit.WebViewClient;/** * Demo描述: WebView超时的处理 */public class MainActivity extends Activity {private Timer mTimer;private WebView mWebView;private TimerTask mTimerTask;private final int TIMEOUT = 10000;private final int TIMEOUT_ERROR = 9527;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();}private Handler mHandler = new Handler() {public void handleMessage(Message msg) {if (msg.what == TIMEOUT_ERROR) {System.out.println("===》 收到消息: webView超时");}};};private void init() {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(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {return super.shouldOverrideUrlLoading(view, url);}@Overridepublic void onLoadResource(WebView view, String url) {super.onLoadResource(view, url);}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);System.out.println("======> onPageStarted 开始加载");mTimer = new Timer();mTimerTask = new TimerTask() {@Overridepublic void run() {// 在TIMEOUT时间后,则很可能超时.// 此时若webView进度小于100,则判断其超时// 随后利用Handle发送超时的消息System.out.println("======> mWebView.getProgress()="+ mWebView.getProgress());if (mWebView.getProgress() < 100) {Message msg = new Message();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);}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);System.out.println("======> onPageFinished 加载完成");if (mTimer != null) {mTimer.cancel();mTimer.purge();}}});}// 处理Back键@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == event.KEYCODE_BACK && mWebView.canGoBack()) {mWebView.goBack();return true;}return super.onKeyDown(keyCode, event);}}


 

原创粉丝点击