您好,欢迎来到源码搜藏!分享精神,快乐你我!提示:担心找不到本站?在百度搜索“源码搜藏”,网址永远不丢失!
  • 首 页
  • 在线工具
  • 当前位置:首页 > 安卓源码 > 技术博客 >

    AndroidWebView的销毁和无法加载天猫网页的问题

    时间:2016-12-26 17:29 来源:互联网 作者:源码搜藏 浏览:收藏 挑错 推荐 打印

    将WebView彻底销毁的问题 在写一个VideoView播放视频时,发现跳转到webView播放完h5加载的video标签的视频后finish再跳转回来,VideoView再播放视频时会出现此视频无法播放,而且我以前加载的动画也会很卡,所以我怀疑是webView还占内存的原因,所以我决定销

    将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,还是没用

    //清除cookie
    CookieManager.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;
                }
    AndroidWebView的销毁和无法加载天猫网页的问题转载http://www.codesocang.com/anzhuoyuanma/boke/34232.html
    标签:网站源码