首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:清除所有应用程序的缓存?

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

Stack Overflow用户
提问于 2013-01-25 01:22:28
回答 2查看 23.5K关注 0票数 24

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

然而,情况显然并非如此。如果你看看Google Play中的应用程序App Cache Cleaner,历史橡皮擦,1Tap Cleaner,Easy History Cleaner,以及无数其他类似的应用程序(所有这些应用程序都不需要root),你就会意识到它们都可以做到这一点。因此,这是可以做到的,但我只是找不到任何公开的例子如何做到这一点。

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

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-25 03:25:51

这里有一种不需要IPackageDataObserver.aidl的方法

代码语言:javascript
运行
复制
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;
    }
}

您需要在您的清单中包含以下内容:

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>

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

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

票数 34
EN

Stack Overflow用户

发布于 2013-01-25 02:13:15

您可以使用this (freeStorageAndNotify)方法清除所有应用的数据。你必须使用java反射来访问这个方法。为此,您需要使用IPackageDataObserver.aidl。您还需要在清单文件中具有删除缓存的权限

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14507092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档