onDestoy() richtig implementieren

D

Duckemai

Fortgeschrittenes Mitglied
6
@first: Sorry für den Schreibfehler - onDestroy()

Hallo zusammen,

ich habe ein App geschrieben, über das dem User mittels Menü und eines 2tes Activity (Preference) eine Listenauswahl gezeigt wird. Nun möchte ich dem User ersparen, nach der Auswahl, die Rücktaste drücken zu müssen. Dies soll automatisch geschehen.

Dafür habe ich in der onCreate der Preference folgendes gemacht:

public void onCreate(Bundle savedInstanceState) {
...
customPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference Preferences,
Object customPref) {
Intent i = new Intent(Preferences.this, Hauptaktivity.class);
startActivity(i);
return true;
...
}

Das klappt auch. Aber natürlich wird die Preference nicht ordungsgemäß beendet. Wie baut man die onDestroy() hier richtig ein?

this.onDestroy() klappt nicht.

Wenn ich sie anschließend überschreibe mit:
@Override protected void onDestroy() {
super.onDestroy();
}
erfolgt kein Aufruf der Methode, da er vorher rausgeht.

Hat jemand einen praktischen Rat für mich, wie sowas geht
oder ein Code-Bsp. um das mal zu sehen?

Vielen Dank
Duckemai
 
Lösung: finish().
Tja, so einfach kann das Leben sein. In der Programmierung eher ungewöhnlich ;-)
 
Es ist nicht garantiert, das onDestroy() tatsächlich aufgerufen wird - ergo, man implementiert es gar nicht und gibt die Resources im onPause() frei :)
 
Wie würdest Du das Programm aufbauen?

onPause()
und danach
finish()

Wäre das Activity dann sicher beendet?
 
onPause() bedeutet das deine Aktivität gleich aus dem Blick von der Benutzer verschwindet (und eventuell nicht wieder angezeigt wird) - das ist der einzige Callback
der garantiert ist - also, allles unnutzes freigeben, Threads anhalten, Zustand speicher usw.

finish() rufst du selbst auf, wenn deine Aktivität den Benutzer nicht mehr mag und gehen will (vorher bitte aufräumen) ;)
 
  • Danke
Reaktionen: Duckemai
Hi Leute,

ich möchte meine (selbstegschrieben) Apps richtig beenden.
Bei java geht das ja mit System.exit(0) bei Android anscheinend mit finish().

So weit so gut.

Jetzt lese ich aber immer, das man die Ressourcen noch aufräumen muss (onDestroy(), isFinishing()) Oder wie darf ich mir das vorstellen.

Hier mal meine Methode, die das Prog schließen soll und auch alles freigeben soll:
Code:
public void schließen(){
		this.finish();
	}

Kann die bitte mal einer richtig vervollständigen?

Und dann noch die Sache: Wie ruf ich diese Methode auf, wenn jem. den Homebutton drückt?

Danke vielmals!
 
public void onStop(){
super.onStop();
schließen();
}

Du solltest zb dafür sorgen, dass eventuelle Threads beendet werden, diese werden munter weiter ausgeführt, genauso wie Runnables.
 
Fr4gg0r schrieb:
public void onStop(){
super.onStop();
schließen();
}

... es ist aber nicht sichergestellt, das diese Methode tatsächlich von Framework aufgerufen wird
 
Bladefs schrieb:
Hi Leute,

ich möchte meine (selbstegschrieben) Apps richtig beenden.
Bei java geht das ja mit System.exit(0) bei Android anscheinend mit finish().
... System.exit() ist eine sehr sehr schlechte Idee. (bis auf sehr seltene Ausnahmen)

Jetzt lese ich aber immer, das man die Ressourcen noch aufräumen muss (onDestroy(), isFinishing()) Oder wie darf ich mir das vorstellen.

Du sollst vor allem CPU freigeben (Threads anhalten), sockets und Dateien schliesen usw. Das gehört in onPause()



Und dann noch die Sache: Wie ruf ich diese Methode auf, wenn jem. den Homebutton drückt?

Gar nicht. Wenn HOme-Button gedruckt wird, wird onPause() aufgerufen
Dort sollltest du alle Threads anhalten die du eventuell getartet hast, und
aktuellen zustand speichern - anssonsten soll die Anwendung bereit sein
in onResume() wieder schnell vollen Fahrt aufzunehmen (zum Beispiel, ich habe ganz schnell neuen Tweet gelesen, und jetzt will ich weiter spielen -
da wo ich aufgehört habe.
 
Hi, danke für die Antworten.

Sockets und Threads habe ich noch keine, ich steck noch in den Anfängen (sind nur kleine Soundboards)

Auf gut Deutsch, ich mach mein schließen mit this.finish() und brauch dann für den Home button noch n onPause() (gibts vom System) und da pack ich nommal das schliesen() rein.

Aber für was ist das super.onstop() kapier das in dem Doc nicht so ganz ...

Danke
 
Falls du zu faul bist, Threads sauber auslaufen zu lassen, dürfte es auch das hier tun: :D

android.os.Process.killProcess(android.os.Process.myPid());
 
Fr4gg0r schrieb:
Falls du zu faul bist, Threads sauber auslaufen zu lassen, dürfte es auch das hier tun: :D

Ich weis nicht ob ich zu faul bin,

ich hab einfach kp wie ich den auslaufen lassen sollten (zumal ich keine THreats verwende ;))

will einfach nur mein Programm beenden :p

hilfts was, wenn ich den ganzen source code schicke?
 

Ähnliche Themen

S
Antworten
7
Aufrufe
1.131
swa00
swa00
M
  • maksimilian
Antworten
6
Aufrufe
993
jogimuc
J
M
  • maksimilian
Antworten
1
Aufrufe
1.488
jogimuc
J
Zurück
Oben Unten