2012-06-11 10 views
11

Chcę wyczyścić pamięć podręczną aplikacji po wyjściu z aplikacji.Wyczyść pamięć podręczną aplikacji przy wyjściu w Androidzie

to zadanie mogę wykonać ręcznie, wykonując poniższe czynności.

< Aplikacje -> Zarządzaj aplikacjami -> „Moja aplikacja” -> Wyczyść pamięć podręczną >>

ale chce zrobić to zadanie programowania na wyjściu z aplikacji .. Proszę mi pomóc faceci ..

Z góry dzięki ..

+1

Możliwy duplikat [Jak wyczyścić cache Android] (http://stackoverflow.com/questions/6898090/how-to-clear-cache-android) – Gofurs

Odpowiedz

15

Spróbuj ten -

import java.io.File; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 

public class HelloWorld extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle *) { 
     super.onCreate(*); 
     setContentView(R.layout.main); 
    } 

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

} 

sprawdź te linki -

+0

Opublikowany link nie wskazuje niczego ważnego. –

+1

Nie usuwaj plików z głównego wątku! Musisz wykonywać te połączenia w innym wątku, aby uniknąć błędów ANR! – Jona

+0

Witam, czy wyczyszczenie db też .. możemy to pominąć? –

9

Aby wyczyścić dane aplikacji, Spróbuj w ten sposób. Myślę, że to ci pomoże.

public void clearApplicationData() 
{ 
    File cache = getCacheDir(); 
    File appDir = new File(cache.getParent()); 
    if (appDir.exists()) { 
     String[] children = appDir.list(); 
     for (String s : children) { 
      if (!s.equals("lib")) { 
       deleteDir(new File(appDir, s));Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************"); 
      } 
     } 
    } 
} 

public static boolean deleteDir(File dir) 
{ 
    if (dir != null &amp;&amp; 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(); 
} 
+0

Dzięki za tak wspaniały odpowiedź. ale moim zmartwieniem jest to, że powinienem zadzwonić do tej metody, ponieważ mam dużo zamieszania na temat czasu wywoływania tej metody. –

+2

W twojej aplikacji będzie działanie, w którym użytkownik wyjdzie (zwykle główna aktywność), zastąpi OnDestroy () i wywołaj powyższy wyraźny kod pamięci podręcznej. – Sathesh

+0

Witam, czy wyczyszczenie db też .. możemy to pominąć? –

2

Just a wyjaśnienia, odpowiedzi działa poprawnie z wyjątkiem trzeba przejść Aplikacji kontekst do trimCache zamiast kontekstu działania (w celu uniknięcia wycieku pamięci), ponieważ trimCache jest metodą statyczną.

@Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     try { 
     trimCache(getApplicationContext()); //if trimCache is static 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
} 

jednak inaczej, można dokonać trimCache non-statyczne i nie ma potrzeby, aby przejść dowolnym kontekście.

public void trimCache() { 
    try { 
    File dir = getCacheDir(); 
    if (dir != null && dir.isDirectory()) { 
     deleteDir(dir); 
    } 
    } catch (Exception e) { 
    // TODO: handle exception 
    } 
} 
+0

Witam, czy wyczyszczenie db też .. możemy to pominąć? –

Powiązane problemy