为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Android

将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;
            }

原文链接:http://www.apkbus.com/blog-875916-62854.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消