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

标签 android caching

在我正在制作的 Android 应用中,我希望能够以编程方式清除设备上所有应用的缓存。这个问题之前已经问过很多次了: Clearing app cache programmatically? Reflecting methods to clear Android app cache Clear another applications cache 每个人都说没有root是不可能的。

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

有人知道所有这些应用都在做什么吗?

谢谢

最佳答案

这是一种不需要 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;
    }
}

您需要在 list 中包含此内容:

<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>

这要求 Android 清除足够多的缓存文件,以便有 8GB 可用空间。如果您将此数字设置得足够高,您应该可以达到您想要的效果(Android 将删除缓存中的所有文件)。

它的工作方式是,Android 会为所有应用程序的缓存目录中的所有文件保留一个 LRU(最近最少使用)列表。当您调用 freeStorage() 时,它会检查存储量(在本例中为 8GB)是否可用于缓存文件。如果没有,它首先删除 oldest 文件,开始从应用程序的缓存目录中删除文件。它会继续删除文件,直到不再有要删除的文件,或者释放了您请求的存储空间(在本例中为 8GB)。

关于Android:清除所有应用程序的缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507092/

相关文章:

android - 永久修改启动 Activity 的 Intent

android - 如何使用 Jetpack Compose 将 BottomSheetScaffold 扩展到特定高度?

java - JCache (JSR107) 是否允许不同条目的不同有效期?

caching - 无法播放 Service Worker 中的缓存音频

android - 第二次启动 Activity 时不调用 onResume()

android - 构建Android UI的简单方法?

android - 无法创建新项目 - 此位置必须没有项目

android - 如何在 Android 上将 Google Drive 与 Picasso 集成?

html - iOS7 主屏幕应用程序似乎不使用 AppCache list

json - 清除缓存的 URL