11

必要: 携帯電話にインストールされている各アプリケーションの占有キャッシュ サイズを取得しようとしているだけです。

私のアプローチ:

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();
    }
}

結果: ディレクトリが null の場合、(条件として) 0 が返されます。ただし、ディレクトリが存在する場合は、常に 4 Kb を返します。プロセスに従って、アプリのキャッシュをチェックアウトしました。

設定:->アプリ:->アプリケーション名

しかし、そこに 0B が見つかりました。

なぜそれが起こっているのか、誰かが説明できますか? キャッシュの正確なサイズを取得するにはどうすればよいですか?

4

3 に答える 3

14

ディレクトリで length を呼び出しても、常に正しいサイズが返されるとは限りません。ファイル リストを繰り返し処理し、すべてのファイル サイズを合計してディレクトリの合計サイズを取得することができます。

このような:

long size = 0;
File[] files = cacheDirectory.listFiles();
for (File f:files) {
    size = size+f.length();
}
于 2013-04-25T05:20:01.097 に答える