WebView的一些优化和遇到的坑

Webview的一些优化和遇到的坑

1、Webview打开一个链接,播放一段音乐,退出Activity时音乐还在后台播放,可以通过在Activity的onPause中调用webview.onPause()解决,并在Activity的onResume中调用webview.onResume()恢复,如下:

  @Override
    protected void onPause() {
       mX5WebView.onPause();
        mX5WebView.pauseTimers();
       super.onPause();
    }
 @Override
    protected void onResume() {
       mX5WebView.onResume();
        mX5WebView.resumeTimers();
       super.onResume();
    }

Webview的onPause()方法官网是这么解释的:

Does a best-effort attempt to pause any processing that can be paused safely, such as animations and geolocation. Note that this call does not pause JavaScript. To pause JavaScript globally, use pauseTimers(). To resume WebView, call onResume().

通知内核尝试停止所有处理,如动画和地理位置,但是不能停止Js,如果想全局停止Js,可以调用pauseTimers()全局停止Js,调用onResume()恢复。

2、5.0 以后的WebView加载的链接为Https开头,但是链接里面的内容,比如图片为Http链接,这时候,图片就会加载不出来,解决方法:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
 webSetting.setMixedContentMode(webSetting.getMixedContentMode());
  }

原因是5.0之后不支持Https和Http的混合模式,具体可参看:Android5.0 WebView中Http和Https混合问题

3、WebView与JavaScript相互调用时,如果是debug没有配置混淆时,调用时没问题的,但是当设置混淆后发现无法正常调用了,解决方法:
在proguard-rules.pro文件中配置:

-keepattributes *Annotation*  
-keepattributes *JavascriptInterface*
-keep public class org.mq.study.webview.DemoJavaScriptInterface{
    public <methods>;
}

如果是内部类:

-keepattributes *Annotation*  
-keepattributes *JavascriptInterface*
-keep public class org.mq.study.webview.webview.DemoJavaScriptInterface$InnerClass{
    public <methods>;
}

4、WebView中存在的漏洞,参看:你不知道的 Android WebView 使用漏洞

猜你喜欢

转载自blog.csdn.net/hzw2017/article/details/79813600