博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android小知识-了解下WebView
阅读量:6814 次
发布时间:2019-06-26

本文共 1919 字,大约阅读时间需要 6 分钟。

本平台的文章更新会有延迟,大家可以关注微信公众号-顾林海,包括年底前会更新kotlin由浅入深系列教程,目前计划在微信公众号进行首发,如果大家想获取最新教程,请关注微信公众

WebView的坑点

1、在API16之前存在远程代码执行漏洞,该漏洞源自于程序没有正确限制使用WebView.addJavascriptInterface方法,攻击者可以使用Java Reflection API利用该漏洞执行任意Java对象和方法。

2、WebView的销毁和内存泄漏问题。WebView的完全销毁是件麻烦事,一旦销毁流程不正确,极易容易导致内存泄漏。

WebView的回收实例:

public class MainActivity extends Activity {    private FrameLayout mWebContainer;    private WebView mWebView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.your_layout);        mWebContainer = (FrameLayout) findViewById(R.id.web_container);        mWebView = new WebView(getApplicationContext());        mWebContainer.addView(mWebView);    }    @Override    protected void onDestroy() {        super.onDestroy();        destroyWebView();    }    public void destroyWebView() {        mWebContainer.removeAllViews();        if (mWebView != null) {            mWebView.clearHistory();            mWebView.clearCache(true);            mWebView.loadUrl("about:blank"); // clearView() should be changed to loadUrl("about:blank"), since clearView() is deprecated now            mWebView.freeMemory();            mWebView.pauseTimers();            mWebView = null; // Note that mWebView.destroy() and mWebView = null do the exact same thing        }    }}复制代码

WebView的内存泄漏的主要原因:

WebView会关联一个Activity,WebView执行的操作是在新线程当中回收,时间Activity没有办法确认,Activity的生命周期和WebView线程生命周期不一致导致WebView一直执行,因为WebView内部持有Activity的引用,导致Activity一直不能被回收,原理类似于匿名内部类持有外部类的引用一样。

WebView的内存泄漏的解决方案:

独立进程,简单暴力,涉及到进程间通信。(开发过程中常用)

动态添加WebView,对传入WebView中使用Context弱引用,动态添加WebView意思在布局中创建一个ViewGroup用来放置WebView,Activity创建add进来,Activity停止时remove掉。

其它问题

WebView硬件加速偶尔导致页面白块,页面闪烁,但是加载速度比较快,解决方案:关闭硬件加速。

后台耗电(性能优化) :WebView开启网页时会自己开启线程,如果没有合理的销毁,那么残余线程就会一直运行,so这会非常耗电的,解决方案:有一种暴力方式就是Activity的onDestroy中调用System.exit()方法把虚拟机关闭,也可以结合自己应用的WebView的情况设计出一个温柔的方案。

搜索微信“顾林海”公众号,定期推送优质文章。

转载地址:http://ptzzl.baihongyu.com/

你可能感兴趣的文章
【排序】冒泡排序 Swift版本
查看>>
【c】斐波那契数
查看>>
php 生成唯一值
查看>>
Redis数据结构及对象(上)
查看>>
受限玻尔兹曼机的实现及其在推荐系统中的应用
查看>>
2018电影票房分析-谁才是票房之王
查看>>
程序员可以干到多少岁?
查看>>
Storm系列(六)storm和kafka集成
查看>>
东南亚的招聘骗局,程序员请注意!
查看>>
Android 获得View宽高的几种方式
查看>>
iOS正则表达式
查看>>
关于javascript的this指向问题
查看>>
Java程序员必须掌握的spring boot
查看>>
关于移动端适配,你必须要知道的
查看>>
Promise的理解和用法
查看>>
java B2B2C Springboot电子商城系统-高可用的服务注册中心
查看>>
Dubbo的总体架构
查看>>
Spring Cloud微服务架构代码结构详细讲解
查看>>
以太经典硬分叉:矿工欢喜、投资者欢庆、社区高兴的“三赢”之举
查看>>
我的友情链接
查看>>