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

来源:互联网 发布:算法设计与分析陈慧南 编辑:程序博客网 时间:2024/06/05 19:33

现在 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">
@Overrideprotected 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 上查了各种资源造成的问题,进行了集装箱处理,,需求想要做个浏览器,刚刚开始我不断来回点击,崩溃我不要不要的。

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


0 0