1.在页面finish的时候注意:
@Override
protected void onDestroy() {//网页资源释放处理。解决页面退出finish()了,音频还在的问题
if (mViewHolder.mWebView != null) {
((ViewGroup) mViewHolder.mWebView.getParent()).removeView(mViewHolder.mWebView);
mViewHolder. mWebView.destroy();
mViewHolder.mWebView = null;
}
super.onDestroy();
}
2.web的一些设置
private void setupWebView() {
WebSettings setting = mWebView.getSettings();
setting.setCacheMode(WebSettings.LOAD_DEFAULT);
setting.setDefaultTextEncodingName(“UTF-8”);
setting.setJavaScriptEnabled(true);
setting.setJavaScriptCanOpenWindowsAutomatically(true);
// setting.setPluginsEnabled(true);
setting.setDatabaseEnabled(true);
setting.setDomStorageEnabled(true);
// 去掉缩放按钮
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// Use the API 11+ calls to disable the controls
setting.setBuiltInZoomControls(true);
setting.setDisplayZoomControls(false);
} else {
// Use the reflection magic to make it work on earlier APIs
getControlls();
}
//网页进入二级网页时就不会出现短暂黑屏的现象,但是不知道为什么
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
//设定支持viewport后网页的内容才能自适应屏幕
setting.setUseWideViewPort(true);
mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
//web与js交互的一些方法,js调用传值给android
mWebView.addJavascriptInterface(new AppJSParamPassInterface(), “AppJsParamsObj”);
mWebView.addJavascriptInterface(new WebAppInterface(), “shareInfos”);
mWebView.setWebViewClient(webClient);
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
swipeRefreshLay.setRefreshing(false);
setBackActivityTitle(view.getTitle());
super.onReceivedTitle(view, title);
}
});
}
3. web js 与android客户端交互,h5调用客户端方法,获取需要的参数
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl(“javascript:getShareInfos()”);
view.loadUrl(“javascript:getBasePageInfos()”);
}
4.H5调用的方法,传入参数给客户端,控制客户端的一些操作。与2中设置的对应 该类的方法前一定加@JavascriptInterface,否则4.0以后的手机无法接受数据,需要ui更改操作的,则需要另起线程,不能再主线程中更新UI
protected class WebAppInterface {
@JavascriptInterface
public void openNewWeb(String url) {
WebViewActivity.openNewWeb(WebViewActivity.this,
AtomInfoBuilder.addAtomParams4Web(url));
}
@JavascriptInterface
public void clickPic(String json) {
// NewsPicWithShareInfo newsPicWithShareInfo = new Gson().fromJson(json, NewsPicWithShareInfo.class);
// Intent i = new Intent(WebViewActivity.this, NewsPicActivity.class);
// i.putExtra(NewsPicActivity.NEWSPICWITHSHAREINFO,newsPicWithShareInfo);
// startActivity(i);
}
private String shareTitle;
@JavascriptInterface
public void getShareTitle(String title) {
shareTitle = title;
}
@JavascriptInterface
public void b(String title) {
shareTitle = title;
}
/**
* 获取APP所需的网页一些配置信息。需要ui更改操作的,则需要另起线程,不能再主线程中更新UI
*
* @param json
*/
@JavascriptInterface
public void getBasePageInfos(final String json) {
AppHandler.post(new Runnable() {
@Override
public void run() {
mWebPageInfos = new Gson().fromJson(json, WebPageInfos.class);
initTitleBarBtns();
}
});
}
}