web-dev-qa-db-ja.com

キャッシュをクリアする方法Android

アプリケーションがキャッシュに保存するデータをクリアする方法を見つける必要があります。基本的に、Fedorの( ListViewでの画像の遅延ロード )遅延リストの実装を使用しており、次の場合にキャッシュを自動的にクリアしたいたとえば、100枚の画像を読み込んでいますが、その方法について何かアイデアはありますか?

編集:コード:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    list=(ListView)findViewById(R.id.list);
    adapter=new LazyAdapter(this, mStrings);
    list.setAdapter(adapter);

    deleteCache(this);
    adapter.notifyDataSetChanged();


}

public static void deleteCache(Context context) {
    try {
        File dir = context.getCacheDir();
        if (dir != null && dir.isDirectory()) {
            deleteDir(dir);
        }
    } catch (Exception e) {}
}

public static boolean deleteDir(File dir) {
    if (dir != null && dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }
    return dir.delete();
}
17
h4rd4r7c0r3

これによりキャッシュが削除されます

public static void deleteCache(Context context) {
    try {
        File dir = context.getCacheDir();
        if (dir != null && dir.isDirectory()) {
            deleteDir(dir);
        }
    } catch (Exception e) {}
}

public static boolean deleteDir(File dir) {
    if (dir != null && dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }
    return dir.delete();
}
37
ilango j

これがあなたがさらに前進するのに役立つことを願っています

public static void trimCache(Context context) {
    File dir = context.getCacheDir();
    if(dir!= null && dir.isDirectory()){
        File[] children = dir.listFiles();
        if (children == null) {
            // Either dir does not exist or is not a directory
        } else {
            File temp;
            for (int i = 0; i < children.length; i++) {
                temp = children[i];
                temp.delete();
            }
        }

    }

} 
4
Karan Shah

システムサービスを呼び出すことができますclearApplicationUserData()(> = KitKatバージョンでのみ機能します)

だからあなたはバージョンのチェックをすることができ、それからすべてがうまくいくでしょう:)ここにコードがあります:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
            ((ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE))
                    .clearApplicationUserData();
    }
1
Gofurs

Apache Commons IOを使用している場合、これは1行で実行できます(try-catchを除く)。

try {
    FileUtils.deleteDirectory(context.getCacheDir());
} catch (IOException e) {
    // Do some error handling
}
0
SBerg413