将WebView彻底销毁的问题
在写一个VideoView播放视频时,发现跳转到webView播放完h5加载的video标签的视频后finish再跳转回来,VideoView再播放视频时会出现此视频无法播放,而且我以前加载的动画也会很卡,所以我怀疑是webView还占内存的原因,所以我决定销毁WebView,但是尝试了很多方法。
方法一: 设置setting的缓存及WebView再finish时清除缓存及本地文件,但是没用。
private static final String APP_CACAHE_DIRNAME = "/webcache";
//设置webView缓存功能
public void setCache(WebSettings settings){
settings.setCacheMode(WebSettings.LOAD_NO_CACHE); //设置 缓存模式
// 开启 DOM storage API 功能
settings.setDomStorageEnabled(true); //开启 database storage API 功能
settings.setDatabaseEnabled(true);
String cacheDirPath = getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME;// String cacheDirPath = getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME;
//设置数据库缓存路径
settings.setDatabasePath(cacheDirPath); //设置 Application Caches 缓存目录
settings.setAppCachePath(cacheDirPath); //开启 Application Caches 功能
settings.setAppCacheEnabled(true);
} /**
* 清除WebView缓存
*/
public void clearWebViewCache(){ //清理Webview缓存数据库
try {
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
} catch (Exception e) {
e.printStackTrace();
} //WebView 缓存文件
File appCacheDir = new File(getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME);
File webviewCacheDir = new File(getCacheDir().getAbsolutePath()+"/webviewCache"); //删除webview 缓存目录
if(webviewCacheDir.exists()){
deleteFile(webviewCacheDir);
} //删除webview 缓存 缓存目录
if(appCacheDir.exists()){
deleteFile(appCacheDir);
}
} /**
* 递归删除 文件/文件夹
*
* @param file
*/
public void deleteFile(File file) { if (file.exists()) { if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
File files[] = file.listFiles(); for (int i = 0; i < files.length; i++) {
deleteFile(files[i]);
}
}
file.delete();
} else {
Log.e("WebView", "delete file no exists " + file.getAbsolutePath());
}
}重写finish()方法清除
@Override
public void finish() {
clearWebViewCache(); super.finish();
}方法二 :还是重写finish(),在里面清除cookie和session,然后webview=null,还是没用
//清除cookieCookieManager.getInstance().removeAllCookie(); CookieManager.getInstance().removeSessionCookie();
方法三:在Activity的布局中加入一个FrameLayout布局,然后将WebView动态加载进去,然后重写onDestroy(),再将FrameLayout里的View全部移除,上面的代码我也重写到onDestroy()中
@Override
protected void onDestroy() { //清除WebView缓存
clearWebViewCache(); //清除cookie
CookieManager.getInstance().removeAllCookie();
CookieManager.getInstance().removeSessionCookie(); //fm_webview指FrameLayout
fm_webview.removeView(questWvQuest); //questWvQuest指webView
questWvQuest.destroy();
questWvQuest=null; super.onDestroy();
}这里还有一位大牛的博客,大家可以参考一下,说不定有帮助http://blog.csdn.net/qq_16318981/article/details/45362399
WebVIew无法加载天猫网页的问题
只要需要重写这个方法就行,但是一定要注意,不要重写shouldOverrideUrlLoading();这个方法
questWvQuest.setWebViewClient(new WebViewClient() { @Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
WebResourceResponse response = super.shouldInterceptRequest(view, url); if(url != null && url.contains(INJECTION_TOKEN)) {
String assetPath = url.substring(url.indexOf(INJECTION_TOKEN) + INJECTION_TOKEN.length(), url.length()); try {
response = new WebResourceResponse( "application/javascript", "UTF8",
RequestActivity.this.getAssets().open(assetPath)
);
} catch (IOException e) {
e.printStackTrace(); // Failed to load asset file
}
} return response;
}
随时随地看视频