Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一键清理应用数据或者清除应用缓存的方法

一键清理应用数据或者清除应用缓存的方法

作者头像
非著名程序员
发布于 2018-02-08 09:54:10
发布于 2018-02-08 09:54:10
3.7K01
代码可运行
举报
文章被收录于专栏:非著名程序员非著名程序员
运行总次数:1
代码可运行

导语:最近在做一个一键清理应用缓存的功能,做着做着发现挺有意思,总结了两种方法,供大家参考。

一种是退出应用时,清除应用里的缓存数据。这种方法跟在设置里的应用中去清除数据效果是一样的,非常好用。就是直接执行命令:

"pm clear" + packageName;

方法如下:

代码语言:js
AI代码解释
复制
/**

* 清除应用缓存的用户数据,同时停止所有服务和Alarm定时task
* String cmd = "pm clear " + packageName;
* String cmd = "pm clear " + packageName + " HERE";
* Runtime.getRuntime().exec(cmd)
* @param packageName
* @return
*/
public static Process clearAppUserData(String packageName) {
Process p = execRuntimeProcess("pm clear " + packageName);
if (p == null) {
LogTag.log("Clear app data packageName:" + packageName
+ ", FAILED !");
} else {
LogTag.log("Clear app data packageName:" + packageName
+ ", SUCCESS !");
}
return p;
}


public static Process execRuntimeProcess(String commond) {
Process p = null;
try {
p = Runtime.getRuntime().exec(commond);
} catch (IOException e) {
LogTag.log("exec Runtime commond:" + commond + ", IOException" + e);
e.printStackTrace();
}
LogTag.log("exec Runtime commond:" + commond + ", Process:" + p);
return p;
}
}

另一种方法就是在应用内,清除数据,不退出应用。就是删除 /data/data/包名/cache 内的应用内缓存和外部缓存。

方法如下:

代码语言:js
AI代码解释
复制


/*  * 文 件 名:  DataCleanManager.java  * 描 述:  主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清除自定义目录  */


import java.io.File;
import android.content.Context;
import android.os.Environment;


/** * 本应用数据清除管理器 */
public class DataCleanManager {
    /** * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * @param context */
    public static void cleanInternalCache(Context context) {
        deleteFilesByDirectory(context.getCacheDir());
    }


    /** * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * @param context */
    public static void cleanDatabases(Context context) {
        deleteFilesByDirectory(new File("/data/data/"
                + context.getPackageName() + "/databases"));
    }


    /**
     * * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * * @param
     * context
     */
    public static void cleanSharedPreference(Context context) {
        deleteFilesByDirectory(new File("/data/data/"
                + context.getPackageName() + "/shared_prefs"));
    }


    /** * 按名字清除本应用数据库 * * @param context * @param dbName */
    public static void cleanDatabaseByName(Context context, String dbName) {
        context.deleteDatabase(dbName);
    }


    /** * 清除/data/data/com.xxx.xxx/files下的内容 * * @param context */
    public static void cleanFiles(Context context) {
        deleteFilesByDirectory(context.getFilesDir());
    }


    /**
     * * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache) * * @param
     * context
     */
    public static void cleanExternalCache(Context context) {
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            deleteFilesByDirectory(context.getExternalCacheDir());
        }
    }


    /** * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * * @param filePath */
    public static void cleanCustomCache(String filePath) {
        deleteFilesByDirectory(new File(filePath));
    }


    /** * 清除本应用所有的数据 * * @param context * @param filepath */
    public static void cleanApplicationData(Context context, String... filepath) {
        cleanInternalCache(context);
        cleanExternalCache(context);
        cleanDatabases(context);
        cleanSharedPreference(context);
        cleanFiles(context);
        for (String filePath : filepath) {
            cleanCustomCache(filePath);
        }
    }


    /** * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * @param directory */
    private static void deleteFilesByDirectory(File directory) {
        if (directory != null && directory.exists() && directory.isDirectory()) {
            for (File item : directory.listFiles()) {
                item.delete();
            }
        }
    }
}

谁有更好的方法吗?可以分享一下,大家共同进步。

最近累啊,累,大家看完就都早点休息吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 反射机制深度剖析:原理、用法与实战
Java 是一种强类型语言,一般在编译期确定类型。但在某些场景中,我们希望在运行时动态获取类的信息,甚至动态创建对象、调用方法或访问字段。
用户11690571
2025/06/06
1360
Java注解的介绍和反射使用
java注解==(Annotation)==,又称为java标注,是jdk5.0引入的一种机制。
半月无霜
2023/03/03
3780
Java之反射
Reflection(反射) 是被视为动态语言的关键,反射的机制允许程序在执行期间借助 Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性方法。
OY
2022/03/12
2470
Java之反射
Java基础(二十三):反射机制
(1)class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类 (2)interface:接口 (3)[]:数组 (4)enum:枚举在这里插入代码片 (5)annotation:注解@interface (6)primitive type:基本数据类型 (7)void
Java微观世界
2025/01/21
1250
Java基础(二十三):反射机制
利用反射技术提升Java应用的灵活性和可扩展性
结论:**同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个**。
杨不易呀
2023/09/26
2300
利用反射技术提升Java应用的灵活性和可扩展性
Java 反射深入浅出
Java Reflection(反射) 被视为动态语言的关键,Java并不是动态语言,但因为反射Java可以被称为准动态语言
Java_慈祥
2024/08/06
1570
Java 反射深入浅出
Java程序设计(高级及专题)- 类的加载和反射[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 加载器 类加载器就是可以从其作用来理解,其功能就是将classpath目录下.class文件,加载到内存中来进行一些处理,处理完的结果就是一些字节码
全栈程序员站长
2022/08/04
4010
Java程序设计(高级及专题)- 类的加载和反射[通俗易懂]
java反射原理
  简单来说,反射可以帮助我们在动态运行的时候,对于任意一个类,可以获取其所有的方法(包括public、protected、private和默认状态的),所有的变量(包括public、protected、private和默认状态的)。
Java阿呆
2020/11/04
6010
java反射原理
java的反射(reflection)机制_腹部反射区图解
在运行时,判断任意一个类的完整结构,比如属性,方法,内部类,实现接口等
全栈程序员站长
2022/11/18
2850
java的反射(reflection)机制_腹部反射区图解
java之反射机制
假设现在我们有一张动漫的图片,我们通过这张图片,在大脑中搜索有关记忆,就清楚这张图片是什么动漫里的谁;假设我们现在有一个名字,在大脑中搜索有关记忆,就自然而然地想到了该名字人物的具体形象,这种思维过程就是反射。
西西嘛呦
2020/08/26
3220
Java反射真正的详解,学以致用,实战案例,近万字长文,不读后悔
全文共 7500 字左右,案例均可运行,阅读时间大约需要20分钟左右,如有问题,请留言或发送邮件(nzc_wyh@163.com)。
宁在春
2022/10/31
7190
Java反射真正的详解,学以致用,实战案例,近万字长文,不读后悔
Java反射详解
这样的需求在学习框架时特别多,即通过外部文件配置,在不修改源码情况下。来控制程序,也符合设计模式的ocp原则(开闭原则:不修改源码,扩容功能)。
timerring
2023/05/24
3430
Java反射详解
Java 中的反射与注解
Class 元类是对普通类的抽象,是类的类。Class 包含了一个类的所有属性,包括类名、包名、父类、实现的接口、所有方法、属性等。拿到一个类的 Class 元类,就拿到了这个类所有信息,就可以通过这些信息动态做一些处理。
菜皮日记
2023/12/18
1820
Java 反射详解
反射(Reflection)能够让运行于 JVM 中的程序检测和修改运行时的行为。
Yano_nankai
2018/10/08
3550
大数据必学Java基础(九十):通过反射获取运行时类的完整结构
问题1:创建Person的对象,以后用new Person()创建,还是用反射创建?
Lansonli
2022/12/13
5210
大数据必学Java基础(九十):通过反射获取运行时类的完整结构
深入分析Java反射(一)-核心类库和方法
Java反射的API在JavaSE1.7的时候已经基本完善,但是本文编写的时候使用的是Oracle JDK11,因为JDK11对于sun包下的源码也上传了,可以直接通过IDE查看对应的源码和进行Debug。
Throwable
2020/06/23
9740
反射入门_入门教程
类(外部类,内部类,匿名内部类等等),接口,数组,enum,注解,基本数据类型 ,void都算Class对象
全栈程序员站长
2022/09/21
2610
一起学JAVA 反射学习(超详细)
Reflection(反射) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,也有称作“自省”。 反射非常强大,它甚至能直接操作程序的私有属性。我们前面学习都有一个概念,被private封装的资源只能类内部访问,外部是不行的,但这个规定被反射赤裸裸的打破了。 反射就像一面镜子,它可以在运行时获取一个类的所有信息,可以获取到任何定义的信息(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。
全栈程序员站长
2022/07/01
3510
一起学JAVA 反射学习(超详细)
关于Java中泛型、反射和注解的扫盲篇
  泛型是在JDK1.5之后引入的,旨在让我们写出更加通用化,更加灵活的代码。通用化的手段在于让数据类型变得参数化,定义泛型时,对应的数据类型是不确定的,泛型方法被调用时,会指定具体类型,其核心目标是为了解决容器类型在编译时安全检查的问题。   泛型:一般用在类、方法、接口中,叫做泛型类、泛型接口、泛型方法
程序员波特
2024/01/19
2730
java中的反射
  –对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。
全栈程序员站长
2022/09/06
1.8K0
java中的反射
相关推荐
Java 反射机制深度剖析:原理、用法与实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验