`
iaiai
  • 浏览: 2195496 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android WebView的加载超时处理

 
阅读更多
WebView中支持超时处理,然后就开始翻api,非常奇怪的是Google竟然没有超时的这项设置。随后又Google到处查阅有没有现成的例子,结果还是一无所获。好吧,还是自己动手写个吧,先直接上代码。

package com.iaiai.activity;

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 IaiaiActivity 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) {
                            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);
                timer.cancel();
                timer.purge();
            }
        });
        mWebView.loadUrl("http://iaiai.iteye.com");
    }
}


其中要注意的是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加载完成就完成了,正在加载的图片不在这个范围之内。
分享到:
评论

相关推荐

    android webView下拉刷新

    当WebView加载完成时,我们希望头部(即SwipeRefreshLayout)消失。为此,我们需要监听WebView的页面加载状态。可以重写WebViewClient的`onPageFinished()`方法: ```java webview.setWebViewClient(new ...

    Android WebView或手机浏览器打开连接问题解决办法总结

    在Android应用开发中,WebView是一个重要的组件,它允许开发者在应用程序内部展示网页内容。然而,在实际使用中,可能会遇到各种连接问题,比如如何控制网页链接的打开方式,是留在WebView内部还是跳转到系统浏览器...

    android下载word文档并打开

    另外,可以借助如`Android-Universal-Image-Loader`或`Volley`库处理网络请求。 4. **打开Word文档**: Android原生并不支持直接打开Word文档,但可以借助第三方库如`Apache POI`或者`Google Docs API`。更常见的...

    webview404

    在Android开发中,WebView...总的来说,处理WebView中的网络错误需要对Android网络请求机制有深入理解,同时考虑不同系统版本的兼容性。通过监听错误回调,我们可以优雅地处理各种异常情况,为用户提供良好的使用体验。

    Android WebView打开网页一片空白的解决方法

    网页链接在Android App中打开一片空白,没有任何提示  问题原因 试了很多方法,最后发现是Https的证书有问题,由于网页链接是客户提供的,不知道证书是如何生成的,导致不被Android系统信任 问题的发现之旅 网页...

    安卓Android源码——图片轮播(Viwepager)+(读取网络图片)+点击图片(WebView)展示.zip

    处理网络错误,如404或超时,提供友好的提示。 4. WebView的安全性:确保加载的网页是安全的,避免跨站脚本攻击(XSS)和其他网络安全问题。 总的来说,这个项目涵盖了Android UI设计、网络请求、图片加载优化和Web...

    安卓实现天气预报(通过webView直接显示和OKhttp请求数据显示两种方式)

    4. **处理重定向和错误**:注册WebViewClient并覆盖其shouldOverrideUrlLoading()和onReceivedError()方法,以便处理网页重定向和加载错误。 示例代码: ```java WebView webView = findViewById(R.id.web_view); ...

    Android实现带进度条的WebView

    在Android开发中,为了提升用户体验,我们经常需要在加载网页内容时显示进度条,尤其是在使用WebView加载H5页面时。...记得在实际项目中,还要考虑网络错误处理、页面加载超时等问题,以提供更加完善的用户体验。

    LLQ.rar_android_llq浏览器

    LLQ浏览器很可能通过WebView加载网页,并利用WebView提供的API实现诸如前进、后退、刷新、阻止弹窗等操作。开发者可以通过自定义WebViewClient和WebChromeClient,进一步控制网页的加载过程和用户交互行为。 2. ...

    安卓Android源码——WebLoginDemo.rar

    10. **异常处理**:考虑到网络环境的不稳定性,应适当地处理网络错误,如超时、无网络连接等,并向用户提供相应的错误信息。 11. **性能优化**:对于大型网页,考虑使用WebView的预加载和缓存策略,减少加载时间,...

    Android开发网上遨游应用程序代码(无错误,可运行)

    9. **异常处理**:应用应该能够优雅地处理网络错误,如连接失败、超时等。可以使用`WebViewClient`的`onReceivedError()`方法来捕获并处理这些错误。 10. **性能优化**:由于`WebView`可能会消耗大量内存,因此需要...

    android仿UCWEB界面源码.rar

    为了确保良好的用户体验,需要处理网络异常,如网络连接失败、加载超时等。同时,检测网络状态并适时提醒用户。 通过对"android仿UCWEB界面源码.rar"的分析和学习,开发者可以掌握以上各项技术,从而构建一个功能...

    项目经理Android笔记及试题

    - WebChromeClient:在WebView中,WebChromeClient是用来处理JavaScript中的警告、确认对话框以及获取网页加载进度等高级功能的类。选项C正确。 2. XML解析方法: - DOM解析:DOM解析方式会将整个XML文件加载到...

    Android应用源码-网络浏览类安卓源代码(26例).zip

    1. **WebView组件**:在Android中,`WebView`是用于展示网页内容的关键组件。它允许在应用内加载和显示HTML、CSS和JavaScript内容。开发者可以通过设置`WebViewClient`和`WebChromeClient`来控制页面加载行为和处理...

    2022年最新Android高级技术笔试面试试题及答案.docx

    * WebView中可以用来处理JavaScript警示、确认等对话框的类是WebChromeClient。 * WebView可以使用loadUrl()方法加载HTML页面,需要传入正确的文件路径。 二、XML解析相关知识点 * Android中解析XML文件可以使用...

    Android模拟测验库.docx编程资料

    - **WebViewClient**:主要用于处理与WebView加载相关的事件,如页面开始加载、加载完成、加载失败等。 - **WebChromeClient**:用于处理JavaScript的对话框、网站图标、进度变化等。特别是处理JavaScript发起的...

    android_web查询

    1. **Android WebView组件**:WebView是Android系统提供的一种可以加载网页的组件,它允许我们在Android应用中嵌入网页内容。通过WebView,我们可以直接展示来自Web服务器的数据,如HTML、CSS和JavaScript。 2. **...

    Android实现登录正方教务系统

    7. **异常处理**:在实现过程中,必须考虑到可能出现的异常情况,如网络连接失败、超时、数据解析错误等。通过try-catch语句捕获并处理这些异常,提供良好的用户体验。 8. **安全实践**:为了保护用户隐私,避免...

    Android考试题库.doc

    1. 在 WebView 中,可以用来处理 js 中警示、确认等对话框的是 WebChromeClient。 XML 解析 2. Android 解析 XML 的方法中,将整个文件加载到存中进展解析的是 DOM。 权限管理 3. 属于调用摄像头硬件的权限的是 ...

    android http demo

    可能涉及到网络权限的声明(`&lt;uses-permission android:name="android.permission.INTERNET"/&gt;`),线程管理(通常在子线程中执行网络操作),以及错误处理。 至于"web"部分,可能是展示从服务器加载的网页,这可能...

Global site tag (gtag.js) - Google Analytics