Cancellare la cache dell’Applicazione in uscita in android

Quello che voglio fare è quello di cancellare la memoria cache di applicazione all’uscita di applicazione.

questa operazione posso fare manualmente da questa procedura.

< Applicazioni –> Gestisci Applicazioni –> “le Mie App” –> Cancella Cache>>

ma ho voglia di fare questa operazione tramite la programmazione uscita di applicazione.. please help me ragazzi..

Grazie in anticipo..

InformationsquelleAutor Arun Joshi | 2012-06-11

 

3 Replies
  1. 16

    Provare questo –

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

    Consultare questi link –

    • Il link che hai postato non fa riferimento a nulla di valido.
    • Non rimuovere i file sul thread principale! È necessario fare queste chiamate su un altro thread per evitare ANRs!
    • Ciao, è di cancellare il db di troppo.. si può saltare?
  2. 10

    Per cancellare i Dati dell’Applicazione, si Prega di Provare in questo modo. Penso che aiutare.

    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();
    }
    • Grazie per una risposta meravigliosa. ma la mia preoccupazione è che quando devo chiamare questo metodo perché sto avendo un sacco di confusione sui tempi di convocazione di questo metodo
    • Nell’applicazione ci sarà un’attività in cui l’utente esce(di solito l’attività principale), sostituire la OnDestroy() e chiamare il al di sopra di clear cache codice.
    • Ciao, è di cancellare il db di troppo.. si può saltare?
  3. 2

    Solo una precisazione, le risposte funzionare correttamente tranne devi passare l’ambito di Applicazione di trimCache invece di il contesto di Attività (per evitare la perdita di memoria), dal momento che trimCache è un metodo statico.

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

    Tuttavia, in caso contrario, si può fare trimCache non statico e non c’è bisogno di passare qualsiasi Contesto.

    public void trimCache() {
       try {
         File dir = getCacheDir();
         if (dir != null && dir.isDirectory()) {
            deleteDir(dir);
         }
      } catch (Exception e) {
         //TODO: handle exception
      }
    }
    • Ciao, è di cancellare il db di troppo.. si può saltare?

Lascia un commento