需要:我只是试图获取手机中安装的每个应用程序的占用缓存大小.
我的方法:
PackageManager packageManager = getPackageManager();
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages)
{
try
{
Context mContext = createPackageContext(packageInfo.packageName, CONTEXT_IGNORE_SECURITY);
File cacheDirectory = mContext.getCacheDir();
if(cacheDirectory==null)
{
cacheArrayList.add("0");
}
else
{
cacheArrayList.add(String.valueOf(cacheDirectory.length()/1024));
}
}
catch (NameNotFoundException e)
{
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
结果:如果directory为null,则返回0(作为条件).但是如果目录存在它总是返回4 Kb.我按照以下流程检查了我的应用的缓存:
设置 - >应用程序 - >应用程序名称
但我发现它在那里0B.
为什么它的发生可以解释一下?以及如何获得确切的缓存大小?
fed*_*608 13
这对我来说更准确:
private void initializeCache() {
long size = 0;
size += getDirSize(this.getCacheDir());
size += getDirSize(this.getExternalCacheDir());
((TextView) findViewById(R.id.yourTextView)).setText(readableFileSize(size));
}
public long getDirSize(File dir){
long size = 0;
for (File file : dir.listFiles()) {
if (file != null && file.isDirectory()) {
size += getDirSize(file);
} else if (file != null && file.isFile()) {
size += file.length();
}
}
return size;
}
public static String readableFileSize(long size) {
if (size <= 0) return "0 Bytes";
final String[] units = new String[]{"Bytes", "kB", "MB", "GB", "TB"};
int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
Run Code Online (Sandbox Code Playgroud)
Leo*_*die 11
在目录上调用长度并不总是返回正确的大小.您可以尝试遍历文件列表并添加所有文件大小以获取总目录大小.
像这样:
long size = 0;
File[] files = cacheDirectory.listFiles();
for (File f:files) {
size = size+f.length();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7634 次 |
| 最近记录: |