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

被折叠的 条评论
为什么被折叠?



