1. 程式人生 > >Android WebView 開發 資源釋放,處理詳解

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 上查了各種資源造成的問題,進行了集裝箱處理,,需求想要做個瀏覽器,剛剛開始我不斷來回點選,崩潰我不要不要的。

整篇我就沒解釋了,效果呢比以前好了很多,因為好多我知道 卻說不出來,還有一些我找谷歌的時候看文章覺得有用,就貼上去了。寫的不怎麼樣 勿怪,