我正在尝试清除我自己的应用程序的缓存后退出她 类似这个应用 - >管理应用 - > “我的应用” - >清除缓存 ,我已经尝试过这段代码但不起作用。我把它放在main_acitivty.java
中void onCreate(){
}
..
@Override
protected void onStop(){
super.onStop();
}
//Fires after the OnStop() state
@Override
protected void onDestroy() {
super.onDestroy();
try {
trimCache(this);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void trimCache(Context context) {
try {
File dir = context.getCacheDir();
if (dir != null && dir.isDirectory()) {
deleteDir(dir);
}
} catch (Exception e) {
// TODO: handle exception
}
}
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;
}
}
}
// The directory is now empty so delete it
return dir.delete();
}
答案 0 :(得分:1)
我建议在关闭应用之前不要做这么长时间。
它可以直观地降低您关闭应用程序的速度,或者可以被系统忽略。
如果暂时使用此文件,则删除的最佳时间是在使用文件结束后。
如果您使用此文件来提高应用中某些内容的速度,那么直接向用户提供缓存管理是正常的。例如简单的按钮&#34;清除缓存&#34;在设置中。
同样如@Nicolas所提到的Maltais onDestroy并不总是被称为。此外,在某些情况下,onStop也不会被称为。
但是如果你只想以这种方式做到这一点,你也应该知道app正在关闭。如果有多个活动,您应该计算开/关活动。最简单的方法是实现Activity Lifecycle callback并在Application类中注册它们。在此实现中,您应该在onCreate中增加计数器变量并在onDestroy中减少。并且您可以在onDestroy减少后确定应用程序关闭为零计数器。
int mCounter;
void onCreate() {
++mCounter
}
void onDestroy() {
--mCounter;
if (mCounter == 0) {
// app is closing
}
}
UPD: 您应该将此回调存储在应用程序类中或作为Singleton。