如何在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
相关产品推荐
相关产品推荐

