android手机上的杀毒软件或者是手机管家等类似应用都会有垃圾清理的功能, 那么清理的缓存文件是什么? 怎么去找出应用的缓存文件并将他们清理, 在这里我将介绍如何实现手机垃圾文件清理的功能。
- 缓存文件是什么,缓存文件的目录在那里?
我们知道方法:
getFilesDir() 的路径是 /data/data/包名/files/
getCacheDir()的路径是 /data/data/包名/cache/
缓存文件路径就是getCacheDir()的路径,在此路径下的文件为缓存文件,当系统内存不够,系统会去释放这个路径下的文件。
先看一下缓存清理demo的结果:
2 界面编写
(1)主界面包括一个title, 一个进度条,一个线性布局保存扫描结果(也可以是listview这里为了简便), 一个清理按钮
布局代码:
(2)扫描到的缓存item布局文件:
包含两个textview展示应用名称与缓存大小,一个view作为分割线
3 功能逻辑实现代码
代码中的注释已经很详细,但是这里需要说明一下,关于freeStorageAndNotify等方法的获得是使用反射机制,因为这些方法在PackageManager中是隐藏的,我们通过获取所有的method然后通过名字匹配,获得方法再通过invoke方法去使用获得的方法。具体关于获得所有应用的缓存与清理缓存的步骤方法可以参考android系统源码中的setting模块。
当你copy上面代码到你的工程中,肯定会报错,因为IPackageStatsObserver.Stub和IPackageDataObserver.Stub找不到,因为这两个类是aidl,因为读取与清理缓存需要读取其他应用程序,需要进程间数据通信。
你需要下载IPackageDataObserver.aidl, IPackageStatsObserver.aidl和PackageStats.aidl这三个文件(可以下载demo的源码,源码中包含这三个文件),在你的工程中创建一个名为android.content.pm的package,将这三个文件copy到这个包下,如图:
然后它会自动在gen目录下生成对应的java文件:
这个时候上面的代码就不会出现错误了,关于aidl这里不去介绍,不懂大家可以google一下。
注意: 应用程序需要下面两个权限:
将其加到清单文件AndroidManifest.xml中。