Android用WebView遇到的各种问题

本文记录了在Android项目中使用WebView加载H5页面时遇到的问题,包括标题同步问题和内存泄漏问题。对于标题问题,当H5页面内嵌多层且调用goBack()时,部分机型的onReceivedTitle()方法未触发。解决方法是在WebViewClient的onPageFinished()方法中设置标题。对于内存泄漏,通过动态创建WebView,使用getApplicationContext(),并在onDestroy()中销毁WebView,甚至在必要时为WebView界面开启独立进程来防止内存泄漏。

在项目里某些页面是WebView加载的H5页面,H5页面与原生结合往往出现很多问题,下面把最近遇到的问题记录一下。


一、标题是原生,H5页面又内嵌了几层。WebView调用goBack()有的机型手机不走onReceivedTitle()方法。

      客户端原生做的标题title需要跟h5页面的标题一致。原来在WebChromeClient重写onReceivedTitle()方法里设置更新标题,其第二 个参数就是H5页面的title 。后来在不同机型测试时发现内嵌多层调用goBack()时有一些手机不走onReceivedTitle()方法。

      解决方法:在WebView设置WebViewClient, 重写onPageFinished()方法. 调用oBack()方法时也会走onPageFinished()方法.因此,只要重写onPageFinished()方法,在里面设置title就好了。

@Override
        public void onPageFinished(WebView view, String url) {
            mTitle.setText(view.getTitle());
            loadingDialog.dismiss();
            }
        }

二、WebView容易内存泄漏

      加载的页面比较大的时,WebView内存泄露会很严重

       动态创建WebView;用getApplicationContext()代替Context;在onDestroy()方法里销毁WebView。为加载WeView的界面开一个新进程,在退出页面后关闭这个进程。

WebView mWebView = new WebView(getApplicationContext()); 
LinearLayout  layout  = findViewById(R.id.llLayout); 
layout.addView(mWebView);
   @Override
    public void onDestroy() {
        if (mWebView != null) {
            mWebView.removeAllViews();
            mWebView.destroy();
            mWebView = null;
        }
    }



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值