Android 清理缓存、优化内存空间

ANDROID内存优化(大汇总——全) ANDROID内存优化大汇总完全版,涵盖内存介绍,内存计算,减少内存,重用内存,回收内存等内存优化总结。 阅读详情

有时候项目中需要清理一些缓存数据(如:图片缓存、网络数据缓存等),当然也要对SharedPreferences存储的数据进行清理,当然App中有个这样的功能可能会提高逼格吧。

public class CacheDataManager {
    /**
     * 获取整体缓存大小
     * @param context
     * @return
     * @throws Exception
     */
    public static String getTotalCacheSize(Context context) throws Exception {
        long cacheSize = getFolderSize(context.getCacheDir());
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            cacheSize += getFolderSize(context.getExternalCacheDir());
        }
        return getFormatSize(cacheSize);
    }
    /**
     * 获取文件
     * Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
     * Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
     * @param file
     * @return
     * @throws Exception
     */
    public static long getFolderSize(File file) throws Exception {
        long size = 0;
        try {
            File[] fileList = file.listFiles();
            for (int i = 0; i < fileList.length; i++) {
                // 如果下面还有文件
                if (fileList[i].isDirectory()) {
                    size = size + getFolderSize(fileList[i]);
                } else {
                    size = size + fileList[i].length();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return size;
    }
    /**
     * 格式化单位
     * @param size
     */
    public static String getFormatSize(long size) {
        long kb = size / 1024;
        int m = (int) (kb / 1024);
        int kbs = (int) (kb % 1024);
        return m + "." + kbs + "M";
//        double kiloByte = size / 1024;
//        if (kiloByte < 1) {
//            return size + "Byte";
//        }
//        double megaByte = kiloByte / 1024;
//        if (megaByte < 1) {
//            BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
//            return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";
//        }
//        double gigaByte = megaByte / 1024;
//        if (gigaByte < 1) {
//            BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
//            return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";
//        }
//        double teraBytes = gigaByte / 1024;
//        if (teraBytes < 1) {
//            BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
//            return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
//        }
//        BigDecimal result4 = new BigDecimal(teraBytes);
//        return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";
    }

    /**
     * 清空方法
     * @param context
     */
    public static void clearAllCache(Context context) {
        deleteDir(context.getCacheDir());
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            deleteDir(context.getExternalCacheDir());
        }
    }

    private static boolean deleteDir(File dir) {
        if (dir != null && dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }
        return dir.delete();
    }

}

直接调用:

 CacheDataManager.clearAllCache(SettingActivity.this);

 其实它的清理速度是非常快的,那么做一个延时效果会让用户有一点点体验的:

    @OnClick(R.id.setting_cleancache)
    void clean() {
        //设置默认的等待效果
        mDlg = new WaitingDlg(SettingActivity.this, "", "", true);
        PromptDialog dialog = new PromptDialog(SettingActivity.this, R.string.prompt, R.string.cleancache_title);
        dialog.showYesNo(new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                SPUtils.clear();
                mDlg.start();
                new Thread(new clearCache()).start();
                dialog.dismiss();
            }
        });
    }

    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case 0:
                    mDlg.dismiss();
                    Toast.makeText(SettingActivity.this, "清理完成", Toast.LENGTH_SHORT).show();
                    try {
                        cachetext.setText(CacheDataManager.getTotalCacheSize(SettingActivity.this));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
            }
        }

    };

    class clearCache implements Runnable {
        @Override
        public void run() {
            try {
                CacheDataManager.clearAllCache(SettingActivity.this);
                Thread.sleep(1000);
                if (CacheDataManager.getTotalCacheSize(SettingActivity.this).startsWith("0")) {
                    handler.sendEmptyMessage(0);
                }
            } catch (Exception e) {
                return;
            }
        }
    }

 

Android 内存优化技巧   在之前的 Android 内存管理 &amp;Memory Leak &amp; OOM 分析 中,说到了Android的内存管理相关的原理,也能了解到Android Memory Leak 和 OOM为什么会发生。这次主要说说在编码和优化技巧层面,来预防Memory Leak的发生。 对象都是有生命周期的,对象的生命周期有的是进程级别的,有的是Activity所在的生命周期,随Acti... 阅读详情

相关推荐

暑期实习前端面试笔试总结汇总

腾讯2020暑期实习——前端视频面试(1)回顾 腾讯2020暑期实习——前端视频面试(2)回顾 腾讯2020暑期实习——前端视频面试(3)回顾 腾讯2020暑期实习——前端视频面试(4)回顾 蘑菇街2020暑期实习——前端视频面试回顾 二、笔试 奇安信前端实习笔试总结 vivo笔试(2020年3月8日) ...

明媚 3065

Android 变量生命周期、变量内存释放机制、GC触发时机研究、内存优化建议

先看下面的代码的注释,先明白我说的全局变量 局部变量 说的是什么意思: Activity中定义的全局变量,如果不为null,那么只能在 Activity 的onDestory()的5秒后被GC释放内存,xml里的View的内存机制也是一样 无论你有没有把View设置为全局变量 Activity中定义的全局变量如果被你 = null,那么他的生命周期和局部变量是一样的,都是在触发GC的时候会释放内存 很多手机,你用代码主动调用System.gc() 毫无效果 如果内存不紧张,那么系统会在当前Activity

大模型训练 4096

Fedora 41上安装钉钉7.6.25,我踩过的那些依赖坑和最终解决方案

本文详细记录了在Fedora 41上安装钉钉7.6.25版本的全过程,包括解决依赖问题、转换deb包为rpm格式、处理libm.so.6错误等关键步骤。通过分享这些实用技巧和最终解决方案,帮助Linux用户顺利在Fedora系统上运行钉钉客户端,提升工作效率。

weixin_30485379的博客 204

android应用清除内存,Android 开发进阶之『清除应用中的内存泄漏』

Android 内存管理机制Android 的内存管理机制可以简单概括为:系统没有为内存提供交换区,它使用 paging 与 memory-mapping(mmapping) 来管理内存。对开发来说,上面的管理机制意味着:彻底释放内存资源的唯一方法是释放对象的引用,使对象可以被 GC(garbage collector) 回收。有一种例外情况:没有任何修改的文件,比如代码本身,映射进内存后,如果系...

weixin_33456452的博客 557

大数据面试 逻辑题

逻辑题大致分为比较逻辑题、分析逻辑题、综合逻辑题、抽象逻辑题、概括逻辑题、推理逻辑题、论证逻辑题等,由于这类题比较考验综合素质,因此也一直是各大企业笔试、面试时经常喜欢考察的题目类型之一。很多童鞋认为逻辑题很难,其实不然。多做练习,打开思路,这类题还是可以轻易化解的。 下面为大家整理了网络上最全的75道逻辑判断测试题。在每道题目下方有答案,是用白色显示的,反选就可以看到啦~ 【1】假设有一个池...

zzq_0916s的博客 4421

硬件工程师八大细分岗位详解:从芯片到整机的技术分工与职业选择

硬件工程作为电子系统设计的核心领域,涉及从芯片级到整机级的完整技术链条。其基本原理是通过电路设计、信号处理和功率管理等技术,将电子元件集成为功能完备的硬件系统。随着产品复杂度提升,硬件工程师岗位出现高度专业化分工,这种细分不仅提升了技术深度,更优化了团队协作效率。在工程实践中,信号完整性和电源完整性成为高速数字设计的两个关键技术挑战,直接影响系统稳定性。本文基于行业热词"硬件工程师"和"信号完整性",深入解析八大细分岗位的技术差异,帮助从业者明确职业发展方向,构建系统化的硬件设计思维。

weixin_33811539的博客 450

android内存管理机制概览

Android内存优化是性能优化中很重要的一部分,比如内存溢出(OOM),这些都跟内存息息相关,所以,我们要掌握一些相关知识。 Android 运行时 (ART) 和 Dalvik 虚拟机使用**分页和内存映射**来管理内存。 这意味着应用修改的任何内存,无论修改的方式是分配新对象还是轻触内存映射的页面,都会一直驻留在 RAM 中,并且无法换出。 若要从应用中释放内存,只能释放应用保留的对象引用,使内存可供垃圾回收器回收。 这种情况有一个例外:对于任何未经修改的内存映射文件(如代码),如果系统

fumeidonga的博客 3198

人大金仓数据库Kingbase FlySync同步程序安装

Kingbase FlySync同步程序(以下简称 KFS)是面向异地容灾、数据集中共享的场景推出的具备在异构数据平台间实现实时、增量数据同步的工具类产品,主要采用了物理日志解析技术,帮助用户解决不同数据平台的数据间可实现任意方向实时移动流转的问题,并保证此过程中数据不丢失,状态可监控,流转数据量可统计。KFS 需要安装的主要组件有 2 个,分别是后端同步程序和管理控制平台,另外KFS的部署方式也有2种,为分离部署何集中部署•集中部署:KFS与数据库部署在同一机器上。

weixin_44312518的博客 1178

android Application使用及如何释放内存

android Application简单使用及内存释放; 一、 1、 Application是Android框架的一个系统组件,当Android程序启动时系统会创建一个 Application对象,用来存储系统的一些信息,通常我们是不需要指定一个Application的,系统会自动帮我们创建; 2、Application 对同一个应用程序是唯一的,所以可以使用Application进行数据共享,...

yuanjl 6635

OB4.X集群状态running但是oceanbase-ce is not running

自 V3.2.0 起,若 obd 设置了加密密钥,执行 display 命令输出的集群信息中,密码相关内容为加密状态。若需输出明文密码,可在命令中添加 --epk/–encryption-passkey 指定密钥用于验证。obd 运维的数据库,启停需要使用obd进行操作,停机时候没有使用obd会导致集群状态running但是oceanbase-ce is not running。查看集群中的租户时无租户反馈,警告oceanbase-ce is not running,但是查询集群状态明明是running。

qq961573863的博客 1213

Flatten 层的深度理解与运用

Flatten 层的深度理解与运用

你要拥有一个你喜欢并且热爱的人生 7030

android pad 清除缓存,ipad清理缓存经验介绍

ipad清理缓存经验介绍导语:ipad清理缓存经验介绍?快速清除缓存(Quick App Manager)Quick App Clean Cache 能够列出手机中所有 Android 软件的缓存,同时能够单个或批量清除缓存,并提供直接访问系统,释放高速缓存数据,需要 root 权限,支持 Android 1.5 以上系统!ipad清理缓存经验介绍内存清理ipad的内存管理功能比较智能,但是如果你...

weixin_32259717的博客 1331

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android代码实现清理缓存

Android开发有时候需要实现清理缓存的功能,在网上找了找,基本实现的方式有两种: 第一种:有root权限,直接删除应用的缓存文件夹。可以借鉴一下博客: http://www.cnblogs.com/rayray/p/3413673.html 第二种:不用root权限,利用android系统的漏洞,这种方式是清理所有的缓存。实现的原理是当你的应用申请很大的内存,而系统的内存不满足申请的

繁星点点~ 4068

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android优化大师下载最新版,安卓优化大师

安卓优化大师app是一款非常好用的手机辅助工具,使用这款安卓优化大师软件可以很好地帮助用户来管理手机,对于手机中的垃圾可以起到很好地清洁作用,还可以对手机的网络进行加速,安卓机使用时间长的话总会有一些卡顿现象的发生,使用这款软件可以很好地对手机进行加速,欢迎大家前来下载使用。安卓优化大师介绍安卓优化大师,超过一亿人使用的优化工具,让手机更快更干净。安卓优化大师集成了例如后台应用程序清理,缓存清理,...

weixin_28782221的博客 923

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android7.0清除缓存,iPhone7如何清理应用缓存 iphone7清理应用缓存教程

手机使用后会留下一些缓存垃圾,那么 iPhone7如何清理应用缓存? 下面就带来iphone7清理应用缓存教程,一起来学习下。方法1:强行重启强行重启(也叫冷重启)能够帮助iOS的设备清理一下临时文件,定期强行重启一下设备,会运行得更流畅呢,很多人有时候卡住了,强行重启后顺畅多了,Android设备也是一样。如何强行重启?home键和power键同时按住大概10s,设备会自动关机然后重启。方法2:...

weixin_36074271的博客 406

告别OOM!Glide缓存过期自动清理全攻略:让Android图片加载更流畅

Glide是一款专注于平滑滚动的Android图片加载和缓存库,能够有效解决图片加载过程中出现的内存溢出(OOM)问题,提升应用性能和用户体验。本文将详细介绍Glide缓存过期自动清理的核心机制与实用技巧,帮助开发者轻松掌握这一关键功能。 ## 🧐 为什么需要缓存自动清理? 在Android应用开发中,图片加载是最常见也最容易引发性能问题的场景。当应用频繁加载大量图片时,如果没有合理的缓存管

gitblog_00134的博客 444

安卓手机怎么彻底清理手机内存_手机内存难清理?试试直接删掉这3个文件夹...

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以继续免费收到文章了。每天都有分享,完全是免费订阅,请放心关注。(注:本文转载自网络,如有侵权,请联系我们进行删除,谢谢!) ...

weixin_33501348的博客 9427

安卓一键清理内存_垃圾一键清理大师软件下载-垃圾一键清理大师下载v3.2.2 安卓版...

垃圾一键清理大师软件内置了手机加速、程序管理等功能,既可以时刻清理手机中的垃圾数据,也可以一键整理桌面,让手机每天都运行流畅!这款应用不管在任何安卓智能手机上都可以使用,界面清爽,使用过程中没有广告骚扰,赶快来一试吧。软件介绍垃圾一键清理大师APP是一款专注安卓智能手机垃圾清理,内存释放,手机运行加速的专业手机清理软件。只需要几秒钟,您的手机将运行得更快!增加更多常用工具和生活查询工具,用着省心,...

weixin_39991222的博客 607

SD Maid专业版:深度清理,系统优化

在使用安卓设备的过程中,随着时间的推移,系统中会积累大量的垃圾文件,如卸载残留、应用缓存、数据库等。SD Maid专业版凭借其深度垃圾清理、文件管理与搜索、应用管理、系统优化、安全与隐私保护以及用户友好的界面等优势,成为了众多安卓用户在手机垃圾清理和系统优化方面的首选工具。它不仅能够快速扫描和清理系统垃圾,还提供了文件管理器、文件搜索、应用管理等多种实用功能,帮助用户全面优化手机系统。• 启动项管理:支持管理手机中的启动项,用户可以禁用不必要的启动项,减少系统启动时间和内存占用,确保手机快速启动。

2501_90259289的博客 990

安卓OOM和Bitmap图片二级缓存机制(二)

在上一篇中,已经讨论了安卓中OOM发生的原因,情况和如何有效加载高清图片的。现在在此回顾一下: * 安卓OOM发生的原因:图片分辨率过大,导致加载图片所需的内存超过系统给进程(app)分配的运行内存,内存爆掉,产生OOM * 核心解决办法: 利用BitmapFactory。Options的inSimpleSize,计算出合适的图片采样率,减小图片分辨率。再续前缘,接下来的这篇博客里面我们说图片的

阿敏其人的专栏 2059

Moonlight Android 内存管理终极指南:高效缓存与性能优化秘籍

Moonlight Android 是一款强大的 GameStream 客户端,让你能够将电脑上的游戏流畅地串流到 Android 设备上。然而,要获得最佳的游戏体验,合理的内存管理和性能优化至关重要。本文将为你揭示 Moonlight Android 内存管理的核心机制,分享实用的缓存优化技巧,帮助你在各种设备上都能享受流畅的游戏串流体验。 [![Moonlight Game Streamin

gitblog_00327的博客 617

怎样操作微信可节省大量内存空间

微信是我们常用的社交软件,过节一定拍了不少照片、视频吧! 小程序用上了么?内存够用么? 16G还不是照样删删删 其实,除了手机APP 微信本身占据的内存就很大 反正点点和身边的小伙伴都是被微信占据了手机的大部分存储空间,而聊天记录内的照片和视频,更是堪称占据微信内存的两大“杀手”。 说到清理微信存储空间,小伙伴大多采用下图方式(以安卓为例) 需要说明的是,下面这个技巧并不是简单的教大家清理缓存信息释放内存空间,而是微信新版本提供的2项优化内存功能。 测试微信版本:8.0.16 比方说,日常生活中,当我

sdxlp的博客 719

安卓app缓存设置

无论大型或小型应用,灵活的缓存可以说不仅大大减轻了服务器的压力,而且因为更快速的用户体验而方便了用户。 Android的apk可以说是作为小型应用,其中99%的应用并不是需要实时更新的,而且诟病于蜗牛般的移动网速,与服务器的数据交互是能少则少,这样用户体验才更好,这也是我们有时舍弃webview而采用json传输数据的原因之一。  采用缓存,可以进一步大大缓解数据交互的压力,特此,我们简略列举

小琼琼的博客 3136

Android性能优化篇:从缓存管理进行优化

无论大型或小型应用,灵活的缓存可以说不仅大大减轻了服务器的压力,而且因为更快速的用户体验而方便了用户。 Android的apk可以说是作为小型应用,其中99%的应用并不是需要实时更新的,而且诟病于蜗牛般的移动网速,与服务器的数据交互是能少则少,这样用户体验才更好,这也是我们有时舍弃webview而采用json传输数据的原因之一。  采用缓存,可以进一步大大缓解数据交互的压力,特此,

Jack-Deng's Workspace 1448

涉密电脑痕迹深度清理_猎豹清理大师下载安装手机-猎豹清理大师2020最新版下载v6.17.7 官方安卓版...

猎豹清理大师正版app(clean master)即原金山清理大师,由金山公司推出的手机垃圾清理工具,可以一键快速清理手机中的垃圾,加快运行速度,还支持省电、CPU降温等其他功能,总而言之就是让你电脑用起来更流畅,赶快下载体验吧!猎豹清理大师官网介绍猎豹清理大师是由金山网络开发的智能手机应用。它可以清理智能手机上的应用缓存、残余程序文件、历史痕迹以及应用程序安装包。它还可以通过结束当前运行的进程来...

weixin_39928480的博客 1028
上一篇: ThreadLocal与InheritableThreadLocal的区别
下一篇: Android之获取加载图片宽高问题(getIntrinsicWidth与getwidth的区别)
探索者丶
博客等级 码龄10年 29粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值