Android WebView 开发 资源释放,处理详解

现在 app 与h5  结合的应用越来越多,这里我们一般用 WebView 来显示 但是 问题也挺多的,资源释放,缓存处理,等。


WebView 的基本使用

mWebview = (WebView) findViewById(R.id.webview);
webview.loadUrl(""); 
</pre>WebView  的WebSettings 基本设置百度基本可以查到,我这里就贴出下<p></p><p></p><pre name="code" class="html"><span style="white-space:pre">		</span>setting.setAllowFileAccess(true); // 设置可以访问文件
		setting.setBlockNetworkImage(false);
		// setting.setDomStorageEnabled(true);
		setting.setUseWideViewPort(true);
		setting.setLoadWithOverviewMode(true);
		// setting.setJavaScriptEnabled(true);
		setting.setDomStorageEnabled(true);
		setting.setJavaScriptEnabled(true);

		setting.setRenderPriority(RenderPriority.HIGH);
		if (AppUtils.isNetworkAvailable(mContext)) {
			setting.setCacheMode(WebSettings.LOAD_DEFAULT); // 设置 缓存模式
		} else {
			setting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 设置
																		// 缓存模式
		}
		// 开启 DOM storage API 功能

		// 开启 database storage API 功能
		setting.setDatabaseEnabled(true);
		String cacheDirPath = getFilesDir().getAbsolutePath() + MyConfigurationConstant.APP_WEBVIEW;
		// String cacheDirPath =
		// getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME;
		Log.i(TAG, "cacheDirPath=" + cacheDirPath);
		setting.setAppCacheMaxSize(1024 * 1024 * 5);
		// 设置数据库缓存路径
		setting.setDatabasePath(cacheDirPath);
		// 设置 Application Caches 缓存目录
		setting.setAppCachePath(cacheDirPath);
		// 开启 Application Caches 功能
		setting.setAppCacheEnabled(true);

WebView  的资源释放,重点


<span style="white-space:pre">	</span>if (Build.VERSION.SDK_INT < 18) {
			mWebview.clearView();
		} else {
			mWebview.loadUrl("about:blank");
		}
		
		// 清理Webview缓存数据库
<span style="white-space:pre">		</span>try {
<span style="white-space:pre">			</span>context.deleteDatabase("webview.db");
<span style="white-space:pre">			</span>context.deleteDatabase("webviewCache.db");
<span style="white-space:pre">		</span>} catch (Exception e) {
<span style="white-space:pre">			</span>e.printStackTrace();
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>// WebView 缓存文件
<span style="white-space:pre">		</span>File appCacheDir = new File(context.getFilesDir().getAbsolutePath() + MyConfigurationConstant.APP_WEBVIEW);
<span style="white-space:pre">		</span>Log.e(TAG, "appCacheDir path=" + appCacheDir.getAbsolutePath());
<span style="white-space:pre">		</span>File webviewCacheDir = new File(context.getCacheDir().getAbsolutePath() + "/webviewCache");
<span style="white-space:pre">		</span>Log.e(TAG, "webviewCacheDir path=" + webviewCacheDir.getAbsolutePath());
<span style="white-space:pre">		</span>// 删除webview 缓存目录
<span style="white-space:pre">		</span>if (webviewCacheDir.exists()) {
<span style="white-space:pre">			</span>MyDeleteWebviewCache.deleteFile(webviewCacheDir);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>// 删除webview 缓存 缓存目录
<span style="white-space:pre">		</span>if (appCacheDir.exists()) {
<span style="white-space:pre">			</span>MyDeleteWebviewCache.deleteFile(appCacheDir);
<span style="white-space:pre">		</span>}
		
		progressDialog = null;
		mWebview.removeJavascriptInterface("loadingJs");
		mWebview.freeMemory();
		mWebview.clearCache(true);
		mWebview.clearHistory();
		l_layout.removeView(mWebview);
		mWebview.removeAllViews();
		if (mWebview != null) {
			mWebview.destroy();
			mWebview = null;
		}
		if (flag == true) {
			unbindService(connection);
			flag = false;
		}



@Override
<span style="white-space:pre">	</span>protected void onStart() {
<span style="white-space:pre">		</span>super.onStart();
<span style="white-space:pre">		</span>mWebview.resumeTimers();


<span style="white-space:pre">	</span>}
</pre><pre name="code" class="html">
@Override
	protected void onStop() {
		super.onStop();
		mWebview.reload();
		mWebview.onPause();
		try {
			mWebview.getClass().getMethod("onPause").invoke(mWebview, (Object[]) null);
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
		mWebview.pauseTimers();
		
		
	}

可以评论下,写的不怎么样,只是让我感觉到存在


好吧, 我在google 上查了各种资源造成的问题,进行了集装箱处理,,需求想要做个浏览器,刚刚开始我不断来回点击,崩溃我不要不要的。

整篇我就没解释了,效果呢比以前好了很多,因为好多我知道 却说不出来,还有一些我找谷歌的时候看文章觉得有用,就贴上去了。写的不怎么样 勿怪,


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值