首页 > 其他分享 >为 App 增加清理缓存功能

为 App 增加清理缓存功能

时间:2023-11-25 19:04:20浏览次数:31  
标签:1024 缓存 App 清理 File WebView dir

为 App 增加清理缓存功能

不废话,直接上干货

功能预期

  1. 评估缓存情况,估算出缓存大小;
  2. 一键清除所有缓存

评估缓存大小

已知 app 的缓存目录可通过 context.getCacheDir() 获取,那么评估其内容文件的大小即可,若有其他缓存路径也可通过此方法合并计算:

public long getFolderSize(File folder) {
    long length = 0;
    File[] files = folder.listFiles();
    
    if (files != null) {
        for (File file : files) {
            if (file.isFile()) {
                length += file.length();
            } else {
                length += getFolderSize(file);
            }
        }
    }
    return length;
}

执行方法:

// 新建异步线程防止卡顿
new Thread() {
    @Override
    public void run() {
        super.run();
        long cacheSize = getFolderSize(getCacheDir());
    }
}.start();

接下来需要将缓存大小按照合理的格式显示到界面上,我按照自己的需求小于 1MB 时显示 KB 单位,小于 1KB 时显示 0 KB,使用以下方法即可完成缓存大小的文本组织:

public String formatSize(long size) {
    if (size >= 1024 * 1024) {
        return (size / (1024 * 1024)) + " MB";
    } else if (size >= 1024) {
        return (size / 1024) + " KB";
    } else {
        return "0 KB";
    }
}

清理各单位缓存

WebView 的缓存清理

对于 WebView 可以直接使用 webView.clearCache(true) 方法来进行清理,但清除缓存的界面没有 WebView 实例,因此需要现场先建立一个来执行,注意 WebView 的创建不可以在异步线程进行:

WebView webView = new WebView(me);
webView.clearCache(true);

Glide 的缓存清理

只需要注意 Glide 的缓存清理必须在异步线程执行

try {
    // Glide: You must call this method on a background thread
    Glide.get(me).clearDiskCache();
  } catch (Exception e) {
    e.printStackTrace();
}

其他组件请自行按照对应技术文档进行清理

综合缓存文件清理

所有缓存文件删除即可彻底完成清理步骤

File cacheDir = context.getCacheDir();
deleteDirectory(cacheDir);

删除目录方法:

private static void deleteDirectory(File dir) {
    if (dir != null && dir.isDirectory()) {
        for (File child : dir.listFiles()) {
            // 递归删除目录中的内容
            deleteDirectory(child);
        }
    }
    if (dir != null) {
        dir.delete();
    }
}

总结

其实清理缓存是个挺没必要的工作,Glide 等组件进行缓存的主要目的也在于避免重复资源的加载加快 app 的界面呈现速度,但不可避免的可能因为用户需要或者出现缓存 bug 导致界面无法正常显示等情况需要清理 app 缓存,即便系统本身自带了缓存清理功能(应用设置- app - 存储和缓存 - 清除缓存)但毕竟有些上手门槛且各家厂商操作系统操作逻辑各异不如自己做一个清除功能在 app 内了,通过上述代码即可完成缓存大小估算和清理流程,如有其他常用组件的清理操作方法也欢迎在评论区补充。

标签:1024,缓存,App,清理,File,WebView,dir
From: https://blog.51cto.com/u_16175630/8561724

相关文章

  • springboot学习之——SpringApplication.run方法
    springboot学习之——SpringApplication.run方法目录springboot学习之——SpringApplication.run方法第一步第二步ConfigurableApplicationContextspringboot版本3.1.5第一步 /** *Statichelperthatcanbeusedtoruna{@linkSpringApplication}fromthe *spe......
  • uniapp base64与file互转
    uniappbase64与file互转//base64转flie//base64转fliebase64ToFile(base64data,cb){ constfsm=uni.getFileSystemManager(); constFILE_BASE_NAME='tmp_base64src';//自定义文件名 const[,format,bodyData]=/data:image\/(\w+);base64,(.*)/.exec......
  • [MDP.NetCore] 使用Azure Portal,開發一個從GitHub持續佈署到Azure Container Apps的We
    使用AzurePortal,開發一個從GitHub持續佈署到AzureContainerApps的Web站台程式碼簽入GitHub之後,啟動GitHubAction流程,編譯並部署程式到AzureContainerApps,是開發系統時常見的功能需求。本篇範例協助開發人員使用GitHub與AzurePortal,逐步完成必要的設計和實作。範例下載:Sl......
  • Figma创建App Store 首页
    1.创建画框按住键盘A,选择需要的画框尺寸,如我选择的是iphone11pro/x的画框 2.导入ios常用组件,并将需要的状态栏,和底部指示器,粘贴过去3.增加标尺  4.头像插件搜索avatar      ......
  • 三元里抽化粪池清理车子:城市环境的守护者
    在城市环境卫生领域,三元里抽化粪池清理车子发挥着举足轻重的作用。本文将重点关注这款清理车子在实际工作中的表现,以及它如何助力三元里地区的城市环保事业。初审朱小姐:L882OOO2548,专家团队在线解答,一分钟内回复率高达90%!三元里抽化粪池清理车子的职责使命三元里抽化粪池清理......
  • 安卓APP定制开发:掌握代码的力量!
    随着智能手机的广泛普及,安卓系统在移动设备市场占据了主导地位,为了满足用户多样化的需求,越来越多的企业和开发者选择定制安卓APP,本文将带您了解安卓APP定制开发中需要用到的代码,以及一些基础源代码示例。让我们一起探索安卓世界的奥秘吧!一、语言选择:Java与Kotlin安卓APP开发主要使......
  • 如何选择合适的app开发公司?这几点很重要
    在移动应用已经成为现代生活不可或缺的一部分的今天,许多企业和创业者正积极考虑开发自己的应用程序,以满足不断增长的市场需求。然而,大多数人没有足够的技术知识来单独完成应用开发,这时就需要寻找专注app开发公司。但如何选择合适的开发公司呢?以下是一些关键因素,帮助您做出明智的决......
  • uniapp IOS从打包到上架流程(详细简单) 原创
    ​uniappIOS从打包到上架流程(详细简单)原创1.登入苹果开发者网站,打开AppStoreConnect   ​ 2.新App的创建点击我的App可以进入App管理界面,在右上角点击➕新建App即可创建新的App,如下图: ​ 3.app基本信息填写新建完App后,需要填写App的基本信息,比如App的......
  • uniapp 封装一个类似js-cookie可时效性存储token的方法
    贴代码cache.js/***存储数据*key:缓存的键名,必填*value:缓存的值,选填*seconds:缓存的过期时间,选填,单位为秒,默认为28天*/functionset(key,value,seconds){if(!key){//如果key为空,直接返回console.log("key不能空");return;}const......
  • 什么是APP内测分发平台?
    探讨一下什么是APP内测分发平台。随着移动互联网的快速发展,越来越多的APP问世,而内测分发平台正是为了帮助开发者更好地发布和测试他们的应用而存在的。 内测分发平台是一种可以提供给开发者进行应用内测的平台。开发者可以在此平台上上传他们的应用,并邀请特定或公开的用户群体参与......