App Cache löschen - Wie?

  • 4 Antworten
  • Letztes Antwortdatum
P

pyretta

Ambitioniertes Mitglied
1
Hallo,

zunächst eine Kurzinfo des betreffenden Projekts:


  • Eclipse Juno Build id: 20130225-0426
  • Android minSdk 8
  • Android targetSdk 17
  • PhoneGap 2.5
  • jQuery mobile 1.3
  • Datenbankzugriff mit PhoneGap (WebSQL)
  • Kamerazugriff mit PhoneGap
Die Problematik:

Es ist ja so, dass wenn ich mit PhoneGap ein Bild mit der Kamera aufnehme, und in einem eigens für die App angelegten Ordner speichern möchte, dieses zunächst in einem temporären Verzeichnis abgelegt wird und dann eine Kopie des Bildes erstellt wird die dann in das Verzeichnis verschoben wird. Die verbliebene Kopie im temporären Verzeichnis verbleibt aber und schraubt unnötiger Weise den App Cache hoch.


Die Idee:
App Cache nach Beenden der App einfach leeren/löschen.


Die vermeindliche Lösung, die eigentlich funktionieren sollte, es aber nicht tut:
Code:
public class Startseite extends /*Activity*/ DroidGap {
    private static Startseite instance;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        instance = this;
        .....
        .....
        super.loadUrl("file:///android_asset/www/index.html", 5000);
     }
            @Override
    public void onDestroy() {
          super.onDestroy();
          Startseite.getInstance().clearApplicationData();
          System.out.println("onDestroy()");
       }
     
     public static Startseite getInstance() {
            return instance;
        }

        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("cache")) {
                        deleteDir(new File(appDir, s));
                        Log.i("TAG", "** File /data/data/APP_PACKAGE/" + s + " DELETED **");
                    }
                }
            }
        }

        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();
        }
     
}
Der Ursprungscode hat leider alle Daten der App inklusive Datenbank und Shared Prefs gelöscht, ich habe es auf den Cache beschränken wollen.
Hier der Originalcode: android - Clear Application's Data Programatically - Stack Overflow

Ergebnis meines modifierzten Codes (siehe oben):
Laut LogCat wurde der Cache erfolgreich gelöscht. Aber wenn ich auf dem Smartphone (Samsung Galaxy S3) in "Einstellungen>Application Manager>Meine App>Cache" nachsehe, ist der Cache noch immer genau so voll wie zuvor und kein Byte wurde gelöscht.

Ergebnis des Originalcodes (Link siehe oben):
LogCat gibt mir aus, dass alle Verzeichnisse geleert wurden: Databases, Shared Prefs, Cache etc. Aber auch hier: Wenn ich auf dem Smartphone nachsehe, ist der Cache noch immer genau so voll wie zuvor. Einzig die wichtigen Daten, nämlich die Datenbank etc. wurden gelöscht, der Cache wurde nicht angerührt.

Jetzt hoffe ich auf eure Hilfe, denn irgendwie muss das doch gehn. :sad:

Habe auch einige andere Lösungsansätze ausprobiert, bisher leider auch ohne Erfolg.
Hier zwei Beispiele:
caching - Clear Application cache on exit in android - Stack Overflow
https://coderwall.com/p/aj79eg

Was ich auch gefunden habe, war ein PhoneGap Plugin (Teusink.org: PhoneGap Android CacheCleaner Plugin) das ich in dem Package "org.apache.cordova.plugins" als Klasse erstellen soll. Allerdings ist in dieser PhoneGap Version, die ich nutze, kein solches Package vorhanden. Wenn ich in meinem Projekt unter "Android Private Libraries>cordova-2.5.0.jar" nachsehe, sehe ich lediglich 3 Packages: org.apache.cordova, org.apache.cordova.api, org.apache.cordova.file. Also bin ich hier auch wieder ratlos. :sad:

Die Frage an Euch:
Hat jemand hier eine solche Problematik schon mal lösen können? Wenn ja, wie? Habt Ihr vielleicht Anregungen/Ideen was ich noch ausprobieren könnte? Oder habt Ihr Fehler entdeckt?

Ich wäre sehr dankbar für Eure Unterstützung.
Vielen Dank im Voraus.
 
Vielleicht gibt es einen Unterschied zwischen dem normalen Cache der App und dem Cache der WebView?

Du könntest mal noch zusätzlich
Code:
super.appView.clearCache(true);
versuchen, evtl. hilfts ja. (Quelle: Link)
 
Zuletzt bearbeitet:
Hallo Zoopa,

vielen Dank für deine Antwort und deinen Lösungsvorschlag.
Ich habe ihn soeben ausprobiert, aber leider hat es auch nicht den gewünschten Erfolg erzielt. Schade. Die Idee war wirklich gut.

Aber dein Einwand hat mich auf eine andere Idee gebracht, nämlich dass ich eventuell den falschen Cache anspreche.

Also ich meine den Cache, den man auf dem angehängten Screenshot angezeigt bekommt und manuell in den Einstellungen löschen könnte.

Den würde ich gerne automatisiert nach dem Beenden der App löschen. Einfach um unnötigen Speicherplatzverbrauch von vornherein zu vermeiden. Wie man sieht, kann das schon ziemlich ins Gewicht fallen. Der da angezeigte Cache wurde nur mit wenigen erstellten Bildern erzeugt. Wenn der User dieses Feature exzessiv nutzen würde, wäre sein interner Speicher bald nur mit dieser App ausgefüllt. Das muss doch nicht sein.
 

Anhänge

  • pref-screen.png
    pref-screen.png
    28 KB · Aufrufe: 344
Aber warum willst du dich selber um den Cache kümmern? Das ist doch eigentlich die Aufgabe von Android oder nicht?
Wenn der platz vom Cache anders benötigt wird, löscht Android ihn und damit fertig.
Also hat das tiefere Gründe warum du den Cache leeren willst?

LG. Dagobert

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
Hallo DagobertDokate,

was heisst tiefere Gründe? Ich möchte es dem User nur so komfortabel wie möglich machen, wenn er schon so freundlich ist meine App zu installieren. Ich möchte nicht sein Smartphone mit temporären Dateien "zumüllen" bis der liebe GarbageCollector vorbeischaut und den Unrat entsorgt.

Meine App benötigt die Daten nicht und dem Benutzer wird nur Speicher unnützt weggenommen, wenn auch nur auf Zeit.

Aber das muss man doch regulieren können?
Oder ist das irgendwie ausgehebelt worden?
Oder gibt es einen Grund, das zu ignorieren oder einfach zu lassen?

Der ursprüngliche Beitrag von 15:09 Uhr wurde um 15:34 Uhr ergänzt:

Im Prinzip bräuchte ich sowas:
PhoneGap API Documentation

Also "camera.cleanup()". Dann würden erst gar keine temporäre Daten erzeugt, bzw. sofort entfernt wenn sie unnötig werden. Aber: Das funktioniert nur unter iOS!

Kennt jemand eine Alternative für Android dazu? Google hat mir da auch nicht viel weiter geholfen.
 

Ähnliche Themen

G
Antworten
0
Aufrufe
63
Gerdchen07
G
G
Antworten
1
Aufrufe
329
Gerdchen07
G
G
Antworten
13
Aufrufe
536
Gerdchen07
G
L
Antworten
1
Aufrufe
358
swa00
swa00
migi01
Antworten
26
Aufrufe
1.825
migi01
migi01
Zurück
Oben Unten