快速上手,一目了然 ---- Android WebView 详解

每日一言:这一秒不放弃,下一秒就会有希望。

欢迎一起讨论和学习,QQ:732258496  QQ群:478720016

 

相关文章:浏览器内核-一张图看懂

一.注释说明

               1.  简介:它是一个基于Webkit引擎、展示WebView的控件。(4.4之后使用了Chrome的blink内核)

              2.  作用:(1) . 显示和渲染Web页面;
                               (2). 直接使用html文件(网络上或本地assets中)作布局;
                               (3). 可和JavaScript交互调用;

                  (功能强大,除了具有一般View的属性和设置外,还可以对URL请求,页面加载,渲染,页面交互进行强大的处理)

              3. 使用介绍 :单独使用  或者 联合其它子类一起使用

                                      (1). webview自身的常见方法
                                      (2).常用子类:WebSettings、WebViewClient、WebChromeClient
                                      (3).Android 和JS的交互

二.WebView的常用方法

                1. WebView的状态如下

    //激活webview为活跃状态,能正常执行网页的相应
    webView.onResume();
    //当前页面失去焦点被切换到后台不可见状态,需要执行onPause()
    webView.onPause();
    //当应用程序(存在webview)被切换到后台时,、不仅针对当前的webview而是全局的全应用程序的webview
    //会暂停所有webview的layout,parsing,javascripttimer,降低cpu功耗
    webView.pauseTimers();
    //恢复pauseTimers状态
    webView.resumeTimers();


      //销毁webview
      //在关闭Activity时,如果webview的音乐或视频,孩子播放,就必须销毁webview
      //但是注意:webview调用destory时,webview仍绑定在activity上
      //这是由于自定义webview构建时候传入了改activity的context对象
      //因此先要从父容器中移除webview,然后销毁webview
      ((ViewGroup) webView.getParent()).removeView(webView);
      webView.destroy();

                2. 关于前进/后退网页

    //是否可以后退
    webView.canGoBack();
    //后退网页
    webView.goBack();

    //是否可以前进
    webView.canGoForward();
    //前进网页
    webView.goForward();
    //以当前的index为起点前进或者后退道理是记录中指定的steps
    //如果steps为负数则为后退,正数则为前进
     webView.goBackOrForward(intsteps);
   
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
 
    if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
      webView.goBack();
      return true;
    }
    return super.onKeyDown(keyCode, event);
  }

              3. 清除缓冲数据

    //清除网页访问留下的缓冲
    //由于内核缓冲是全局的因此这个方法不仅仅针对webview而是针对整个应用缓冲
    webView.clearCache(true);
    //清除当前webview访问的历史记录
    webView.clearHistory();
    //仅仅清除自动完成填充的表单数据,不会清除webview存储在本地的数据
    webView.clearFormData();

 三.WebView的常用类

            1.  WebSettings  类

//声明WebSettings子类
WebSettings webSettings = webView.getSettings();

//如果访问的页面要与JavaScript交互,则Webview必须支持javascript
webSettings.setJavaScriptEnabled(true);

//支持插件

//设置自适应屏幕

//缩放操作

//其它:是否启用缓冲,图片,格式,文件等


     2.  WebViewClient  类

 
     //1.直接在Webview中显示网页,不调用系统浏览器
    webView.setWebViewClient(new WebViewClient() {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        return super.shouldOverrideUrlLoading(view, request);
      }
     //2.载入页面开始开始调用用的
      @Override
      public void onPageStarted(WebView view, String url, Bitmap favicon) {
        tvBeginLoading.setText("开始加载了");
      }
      //3.载入页面结束调用的
      @Override
      public void onPageFinished(WebView view, String url) {
        tvEndLoading.setText("结束加载了");
      }
      
      //4.出现错误时 404
      @Override
      public void onReceivedError(WebView view, WebResourceRequest request,
          WebResourceError error) {
        super.onReceivedError(view, request, error);
      }
      //5.处理https请求(webview默认是不处理https请求的,页面显示空白,需要进行如下设置)
      @Override
      public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        super.onReceivedSslError(view, handler, error);
      }
    });

       3.  WebChromeClient  类

 webView.setWebChromeClient(new WebChromeClient() {
      //获取web页中的标题
      @Override
      public void onReceivedTitle(WebView view, String title) {
        tvTitle.setText(title);
      }
      //获取网页的加载进度并显示
      @Override
      public void onProgressChanged(WebView view, int newProgress) {
        if (newProgress < 100) {
          String progress = newProgress + "%";
          tvLoading.setText(progress);
        } else if (newProgress == 100) {
          String progress = newProgress + "%";
          tvLoading.setText(progress);
        }
      }
    });

四.WebView与JS的交互

     详情见下一章节(待完)

五.注意事项:如何避免WebVie内存泄漏

      1.不在xml中定义WebView,而是在需要的时候在Activity中创建,并且Context使用getApplicationContext()

     2.在Activity销毁(WebBiew)的时候,先让WebView加载null内容,然后移除WebView,在销毁WebView,最后置空

 @Override
  protected void onDestroy() {
    if(webView!=null){
      webView.loadDataWithBaseURL(null,"","text/html","utf-8",null);
      webView.clearHistory();
      //销毁webview
      //在关闭Activity时,如果webview的音乐或视频,孩子播放,就必须销毁webview
      //但是注意:webview调用destory时,webview仍绑定在activity上
      //这是由于自定义webview构建时候传入了改activity的context对象
      //因此先要从父容器中移除webview,然后销毁webview
      ((ViewGroup) webView.getParent()).removeView(webView);
      webView.destroy();
      webView=null;
    }
    super.onDestroy();
  }

五.实例

    注意点:网络权限;

                   在webview中显示必须设置  setJavaScriptEnabled  setWebViewClient;

                    加载“https://www.baidu.com/”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值