アプリケーションがキャッシュに保存するデータをクリアする方法を見つける必要があります。基本的に、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();
}
これによりキャッシュが削除されます
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();
}
これがあなたがさらに前進するのに役立つことを願っています
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();
}
}
}
}
システムサービスを呼び出すことができますclearApplicationUserData()(> = KitKatバージョンでのみ機能します)
だからあなたはバージョンのチェックをすることができ、それからすべてがうまくいくでしょう:)ここにコードがあります:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KitKat) {
((ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE))
.clearApplicationUserData();
}
Apache Commons IOを使用している場合、これは1行で実行できます(try-catchを除く)。
try {
FileUtils.deleteDirectory(context.getCacheDir());
} catch (IOException e) {
// Do some error handling
}