您的位置:首页 > 移动开发

Android学习WebView交互开发总结

2017-05-26 11:40 627 查看


一、WebSettings 

1、webSettings.setBuiltInZoomControls(true);       //放大

/**
* 防止webview缩放时退出崩溃。
*/
@Override
public void finish() {
ViewGroup view = (ViewGroup) getWindow().getDecorView();
view.removeAllViews();
super.finish();
}


2、webSettings.setJavaScriptEnabled(true);
//支持JS
3、webSettings.setUseWideViewPort(true);
//支持启动技术
4、webSettings.setLoadWithOverviewMode(true);
//支持加载时相关页面适配
5、webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持JS打开对话窗口
6、webSettings.setSupportMultipleWindows(true);//支持多窗口
7、String cacheDirPath = APP_CACAHE_DIRNAME;       
mWebView.getSettings().setDatabasePath(cacheDirPath);       //设置数据库缓存路径       
mWebView.getSettings().setAppCachePath(cacheDirPath);    //设置 应用 缓存目录       
mWebView.getSettings().setDomStorageEnabled(true);     //开启 DOM 存储功能         
  mWebView.getSettings().setDatabaseEnabled(true);   //开启 数据库 存储功能        
mWebView.getSettings().setAppCacheEnabled(true);  //开启 应用缓存 功能        

二、多窗口+返回键

if (webView.canGoBack() && keyCode==KeyEvent.keyCode_Back){

                webView.goBack();

         

 }

三、JS实现交互

1、添加JS接口: webView.addJavascriptInterface(WebViewActivity.this, "JsInteration");  
//JsInteration 自定义名 与 web端代码function里对应

2、添加方法: @JavascriptInterface  

    public void TixianSubmit() {

        Toast.makeText(WebViewActivity.this, "成功", Toast.LENGTH_LONG).show();

    }

四、Client拦截url地址实现交互

1、首先让写web页面的人员  给出点击时跳转的url路径。
2、拦截url的字符串相匹配,比如返回二级页面,这里url字符串查找是否包含“back_app”关键字。懂了吧

if(url.contains("back_app")) {
finish();
}

3、比如这个是从webview交互跳转activity页面

if (url.contains("MyLuckLog")){//会员页面
startActivity(new Intent(WebViewCommonActivity.this,MemberRecord.class));
}


五、WebView优化

1、防止内存泄漏

@Override
protected void onDestroy() {
super.onDestroy();
webView.removeAllViews();
webView.destroy();
}

要在当前持有webView的页面生命周期里 加上俩个释放的代码。

2、播放视频时,返回页面,声音依然存在问题。

@Override
protected void onResume() {
try {
webView.getClass().getMethod("onResume").invoke(webView,(Object[])null);//继续播放视频
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
super.onResume();
}

@Override
protected void onPause() {
try {
webView.getClass().getMethod("onPause").invoke(webView,(Object[])null);//停止视频播放
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
super.onPause();
}


六、WebView缓存

1、缓存的是url、css、图片、Js等,有两种方式,一种是网页数据缓存,一种是H5AppCache缓存 ,但都会缓存到应有所在的数据库表中。

2、五种模式:
1:Load_Cache_only 只读取缓存
2:Load_Default 根据Cache_Control决定是否网络获取
3:Load_Cache_Noraml   API 17后 与 2相同
4:Load_No_Cache 不使用缓存只从网络获取
5:Load_Cache_Else_Netwrok 只要本地存在缓存 无论是否过期或no_cache,都用缓存

3、正确设置缓存模式:

if (NetWorkUtils.isNetworkConnected(this)){
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
}else{
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}


4、清除WebView缓存
/**
* 清除WebView缓存
*/
public void clearWebViewCache() {
/**清理Webview缓存数据库,缓存文件由程序自动生成
* /data/data/package_name/database/webview.db
* /data/data/package_name/database/webviewCache.db
**/
try {
//因为他们都是文件,所以可以用io方式删除,具体方法可以自己写
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
} catch (Exception e) {
e.printStackTrace();
}
//WebView 缓存文件
File webviewCacheDir = new File(APP_CACAHE_DIRNAME);
//删除webview 缓存目录
if (webviewCacheDir.exists()) {
//具体的方法自己写
deleteFile(webviewCacheDir);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: