You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中添加菜单按钮清除WebView应用缓存

Android WebView 应用添加菜单按钮实现一键清除缓存 详细实现步骤

步骤1:创建菜单资源文件

  • 打开Android Studio项目,在项目视图中找到app/res目录,右键点击res文件夹,依次选择New -> Android Resource Directory,资源类型选择menu,点击确认创建menu目录。
  • 右键点击新建好的menu目录,选择New -> Menu Resource File,文件名填main_menu,点击确认生成文件。
  • 打开res/menu/main_menu.xml,替换成以下代码,添加清除缓存的菜单项:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_clear_cache"
        android:title="清除缓存"
        app:showAsAction="ifRoom"/>
</menu>

说明:showAsAction="ifRoom"表示如果顶部菜单栏有空间就直接显示按钮,没空间就收进折叠三点菜单里。

步骤2:在Activity中加载菜单

  • 打开你承载WebView的Activity文件(一般是MainActivity.java或者MainActivity.kt,以下以Java为例,Kotlin逻辑完全一致仅语法有差异),在类中重写onCreateOptionsMenu方法,加载刚才创建的菜单资源:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;
}

注意:如果你的WebView是写在Fragment里的,需要先在Fragment的onCreate方法中调用setHasOptionsMenu(true),再重写Fragment自身的onCreateOptionsMenu方法加载菜单即可。

步骤3:编写缓存清除逻辑,绑定菜单点击事件

  • 首先在Activity中确认你已经初始化好了WebView实例,假设实例名是webView。
  • 在Activity中重写onOptionsItemSelected方法,识别清除缓存按钮的点击事件,执行完整的缓存清除逻辑:
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    int itemId = item.getItemId();
    if (itemId == R.id.action_clear_cache) {
        // 先停止WebView当前加载动作,避免清除过程冲突
        webView.stopLoading();
        // 清除WebView网页缓存,参数true表示同时清除磁盘缓存,false仅清除内存缓存
        webView.clearCache(true);
        // 清除WebView浏览历史记录
        webView.clearHistory();
        // 清除WebView自动保存的表单数据
        webView.clearFormData();
        
        // 清除Cookie缓存
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.removeAllCookies(null);
            cookieManager.flush();
        } else {
            cookieManager.removeAllCookie();
        }
        
        // 清除WebView本地存储(LocalStorage、SessionStorage等H5缓存)
        WebStorage.getInstance().deleteAllData();
        
        // 弹出提示告知用户清除完成
        Toast.makeText(this, "缓存已清除", Toast.LENGTH_SHORT).show();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

写代码时如果出现类名报红,按快捷键Alt+Enter(Windows)/Option+Enter(Mac)选择导入对应类即可,不需要手动写import语句。
注意:以上所有WebView相关操作必须在主线程执行,不要放到子线程中调用,否则会触发应用崩溃。

常见踩坑说明

  • 如果清除后打开网页还是加载旧资源,可以在WebView初始化时加上webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT),确保缓存策略正常,不要强制使用本地缓存。
  • 如果你的应用做了分区存储适配,不需要额外申请存储权限,以上清除逻辑可以正常生效,不需要额外加权限声明。

内容的提问来源于stack exchange,提问作者John Doey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 02:39:09