Wann Daten speichern, wenn Programm beendet wird?

GMoN

GMoN

Dauergast
393
Android bringt mich gerade zur Verzweiflung.

Und zwar möchte ich, bevor der User das Programm mit dem Back Button die Anwendung beendet, die gesammelten Daten in eine Textdatei speichern. Wo und wann muss ich die Speicher Methode aufrufen? Das Problem ist, dass Speichern dauert ca. 6 Sekunden, es sind also mehrere MB, die auf die SD geschrieben werden müssen. Ich habe es in onDestroy, onStop und onPause versucht. Alle drei werden aber i.d.R. vorzeitig von Android beendet, Android wartet mit dem Schließen meiner Activity also nicht, bis das File auf die SD Karte geschrieben ist. So ist es dann meist nur 0 Byte groß:(

Wie fange ich den diesen Back Button ab um vorher in Ruhe speichern zu können?
 
GMoN schrieb:
Android bringt mich gerade zur Verzweiflung.
Aber nicht doch! ;)

GMoN schrieb:
Und zwar möchte ich, bevor der User das Programm mit dem Back Button die Anwendung beendet, die gesammelten Daten in eine Textdatei speichern. Wo und wann muss ich die Speicher Methode aufrufen? Das Problem ist, dass Speichern dauert ca. 6 Sekunden, es sind also mehrere MB, die auf die SD geschrieben werden müssen. Ich habe es in onDestroy, onStop und onPause versucht. Alle drei werden aber i.d.R. vorzeitig von Android beendet, Android wartet mit dem Schließen meiner Activity also nicht, bis das File auf die SD Karte geschrieben ist. So ist es dann meist nur 0 Byte groß:(
Die normale Vorgehensweise wäre bei onPause zu speichern. Nur hier ist gewährleistet, dass die Methode aufgerufen wird. Bei 6 Sekunden Speichervorgang hätte ich eher erwartet, dass Android einen Dialog zum Beenden der Aktivität aufpoppt, weil es länger als erwartet dauert. Aber ausprobiert habe ich das nicht. Bist Du sicher, dass dein Save tatsächlich funktioniert? Mal reindebuggt?

Andere Frage: Warum streamst Du deine Daten nicht gleich in das File sobald neue Daten verfügbar werden? Wenn ich deine App richtig verstanden habe, sollte das gehen?

GMoN schrieb:
Wie fange ich den diesen Back Button ab um vorher in Ruhe speichern zu können?
Im View onKeyDown implementieren und im Falle vom Back true zurückgeben.
 
Ich habe dazu mal eine ähnliche Frage. Wenn die onStart() aufgerufen wird, wird kurz danach die onResume() aufgerufen & beim zurück Button die wird die onPause() & danch die onDestroy(), ist das normal? Also eigentlich interessiert mich nur letzteres. Wird die Activity immer zerstört? Kann doch nicht sein. :confused:
 
joschika77 schrieb:
Ich habe dazu mal eine ähnliche Frage. Wenn die onStart() aufgerufen wird, wird kurz danach die onResume() aufgerufen & beim zurück Button die wird die onPause() & danch die onDestroy(), ist das normal? Also eigentlich interessiert mich nur letzteres. Wird die Activity immer zerstört? Kann doch nicht sein. :confused:

Doch, ist nur ne Frage der Zeit. Mit dem Back Button schickst die Activity in den Hintergrund, genau wie mit dem Home Button. Und damit signalisierst Du Android, dass sie nicht mehr interessant ist. onPause kommt dabei sofort. der oom_adj geht dann hoch und je nachdem ob andere Activities jetzt viel Speicher brauchen entscheidet Android, wann onDestroy kommt und damit der Speicher komplett freigegeben wird.

Android geht davon aus, dass in Activities eigentlich nur die GUI drin ist und die braucht ja nicht im Speicher zu bleiben, wenn man sie eh garnicht mehr sieht.

Wenn Deine App auch noch was machen soll, während sie im Hintergrund ist, musst du dies zwangsläufig in einen Service auslagern. Das ist eine Besonderheit an Android, die man erstmal verstehen muss. Ich habe mich da auch lange vor gewehrt, da ich dies von Symbian so radikal auch nicht kannte. Aber da führt kein Weg dran vorbei.
 
Gelesen hab ich von den Services auch schon. Werd ich wohl nicht dran vorbei kommen. Eine Frage hab i dazu noch. Ich muß immer in den überschriebenen Methoden das super... aufrufen sonst gibts ne Exception. Soll/Muß das so mit dem super?

Code:
    public void onStop()
    {
        Log.i(TAG,"onStop");        EGlobals.ShowMessage(main.this,"onStop",Toast.LENGTH_SHORT,Gravity.BOTTOM,0,0);
        super.onStop();
    }
 

Ähnliche Themen

A
Antworten
10
Aufrufe
1.867
swa00
swa00
B
Antworten
6
Aufrufe
1.016
jogimuc
J
A
Antworten
10
Aufrufe
1.006
swa00
swa00
Zurück
Oben Unten