Android:清除所有应用程序的缓存?

use*_*237 23 android caching

在我正在制作的Android应用中,我希望能够以编程方式清除设备上所有应用的缓存.之前已经多次询问过:以 编程方式清除应用缓存? 反映清除Android应用缓存的方法 清除另一个应用缓存 ,每个人都说没有root就不可能.

然而,事实显然并非如此.如果您查看应用程序App Cache Cleaner,History Eraser,1Tap Cleaner,Easy History Cleaner以及Google Play中的无数其他类似应用程序(所有这些应用程序都不需要root),您会发现他们都能做到这一点.因此,它可以做到,但我找不到任何公开的例子如何做到这一点.

有谁知道所有这些应用程序在做什么?

谢谢

Dav*_*ser 34

这是一种不需要的方法IPackageDataObserver.aidl:

PackageManager  pm = getPackageManager();
// Get all methods on the PackageManager
Method[] methods = pm.getClass().getDeclaredMethods();
for (Method m : methods) {
    if (m.getName().equals("freeStorage")) {
        // Found the method I want to use
        try {
            long desiredFreeStorage = 8 * 1024 * 1024 * 1024; // Request for 8GB of free space
            m.invoke(pm, desiredFreeStorage , null);
        } catch (Exception e) {
            // Method invocation failed. Could be a permission problem
        }
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

你需要在你的清单中有这个:

<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>
Run Code Online (Sandbox Code Playgroud)

这要求Android清除足够的缓存文件,以便有8GB空闲.如果你设置这个数字足够高,你应该达到你想要的(Android将删除缓存中的所有文件).

这种方式的工作方式是Android保留所有应用程序缓存目录中所有文件的LRU(最近最少使用)列表.当您调用freeStorage()它时,检查是否有可用于缓存文件的存储量(在本例中为8GB).如果没有,它会首先删除最旧的文件,从应用程序的缓存目录中删除文件.它会继续删除文件,直到没有任何文件要删除,或者它释放了您请求的存储量(在这种情况下为8GB).

  • 好吧,我通过使用freeStorageAndNotify而不是freeStorage来实现它.我尝试将IPackageDataObserver设置为null,并且它的工作原理实际上是一个可选参数,即使它没有在方法描述中说明它.编辑:对于任何试图清除所有缓存的人,将desiredFreeStorage更改为Long.MAX_VALUE (7认同)
  • 此外,您获得的代码将只清除足够的缓存文件以释放8GB.如果您已有8GB的可用存储空间,则此代码将无法执行任何操作.如果您确实要删除所有缓存文件,请设置`desiredFreeStorage = Long.MAX_VALUE` (2认同)