2017-05-03 62 views
0

我试图清除我自己的应用程序的缓存后我退出她 类似这个应用程序 - >管理应用程序 - >“我的应用程序” - >清除缓存 ,我已经试过这段代码,但不起作用。我把它放在main_acitivty.java中如何清除应用程序缓存在android退出

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

我想你会想调用'trimCache' _before_'super.onDestroy',不是吗? –

+0

@MattClark感谢您的回复我想在退出我的应用程序后清除缓存 – MrMR

+1

我明白了,并且您已经在退出事件的代码路径中。 'super.onDestroy'将清除代码上游的所有对象。您需要先清除缓存,然后再允许该应用完全退出。这是我的假设,您的缓存实际上并未被清除,因为应用程序在您的代码运行之前退出。此外,当您复制其他人的代码1:1时,[至少将其归入作者](http://stackoverflow.com/a/18200934/1790644)。 –

回答

1

我建议不要在应用程序关闭之前做这么长的事情。

它可以在视觉上减缓你的应用程序关闭或可以被系统忽略。

如果您暂时使用此文件,而不是使用文件结束后删除的最佳时间。

如果您使用此文件来提高应用中某些内容的速度,那么直接向用户提供缓存管理是正常的。例如设置中的简单按钮“清除缓存”。

也如@Nicolas所述Maltais onDestroy并不总是被称为。此外,在某些情况下,停止也不总是被调用。

但是,如果您只想以这种方式进行操作,您还应该知道该应用正在关闭。如果有多个活动,您应该计算开放/关闭活动。最简单的方法是实现Activity Lifecycle callback并在Application类中注册它们。在这个实现中,你应该在onCreate中增加计数器变量,在onDestroy中减少计数器变量。您可以在onDestroy中减少后确定应用程序关闭为零计数器。

int mCounter; 

void onCreate() { 
    ++mCounter 
} 

void onDestroy() { 
    --mCounter; 
    if (mCounter == 0) { 
     // app is closing 
    } 
} 

UPD: 您应该保存这个回调应用类或单身。

+0

我认为'mCounter'需要在实例状态包中保存和恢复才能正常工作 –