Application Class - Methode onTerminate()

  • 6 Antworten
  • Letztes Antwortdatum
C

CROupier

Gast
Hallo, kann mir jemand bei meinem Problem helfen. Vielen Dank im Voraus. Es geht um folgendes: beim Starten der App prüfe ich ob alle Einstellungen gesetzt sind und starte dann u.U. einen Service, der im Hintergrund läuft. Beim Beenden der App möchte ich, dass der Service stoppt. Ich dachte, um dies zu erreichen, müsste ich in der onTerminate-Methode stopService(...) aufrufen. Blöd nur, dass onTerminate() nie ausgeführt wird.

PHP:
public class XYZ extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    Log.i(TAG, "on create ... ");
    ...
    if (app_configurated) {
      Log.i(TAG, "starting service ... ");
      startService(new Intent(this, UpdaterService.class));
    }
  }
	
  @Override
  public void onTerminate() {
    super.onTerminate();
    Log.i(TAG, "on terminate ...");
    Log.i(TAG, "stoping service ... ");
    stopService(new Intent(this, UpdaterService.class));
  }
...
 
OnDestroy?

Gesendet von meinem GT-S5660 mit der Android-Hilfe.de App
 
onDestroy() gibt es nicht!

.... aus der Android-Doku
public void onTerminate ()
Added in API level 1
This method is for use in emulated process environments. It will never be called on a production Android device, where processes are removed by simply killing them; no user code (including this callback) is executed when doing so.

Ich benutze doch einen Emulator zum testen!!! Eine andere Frage, wenn ich die App auf einem Android-Gerät laufen lasse, wird beim Beenden der App auch der gestartete Service beendet?
 
Hmm ich bin mir nicht sicher ob die Application klasse die richtige Klasse ist, die du hier nutzt.

Warum nicht in einer Acitivity?

In der Android Doku steht:
"There is normally no need to subclass Application"

Ich würd eher mal gucken ob dein Problem so "unnormal" ist, dass du das so lösen musst.
 
Activity | Android Developers

protected void onDestroy ()

Added in API level 1
Perform any final cleanup before an activity is destroyed. This can happen either because the activity is finishing (someone called finish() on it, or because the system is temporarily destroying this instance of the activity to save space. You can distinguish between these two scenarios with the isFinishing() method.

EDIT: Ah jetzt weiß ich was du meinst, des onTerminated gibts im Emulator, aber vielleicht bezieht sich das auf das terminierren über die debug bridge?
 
@amfa: In einer Activity macht keinen Sinn, die sind weitaus flüchtiger als der Rest einer App.

Wenn der Service immer laufen soll, dann lass ihn einfach laufen. Sollte das System deine App komplett aus dem Speicher kicken (oder der User über die Einstellungen die App killen), dann wird auch der Service mitbeendet.

onTerminate gibt es tatsächlich nur im Emulator das kannst du vergessen.

Und das subclassen von Application halte ich persönlich für sehr sinnvoll, mache ich fast immer. Man sollte nur wissen was man tut (Aber das ist ein anderes Thema)
 
Entweder mein Service muss mit der onDestroy Methode meiner Hauptactivity mit zerstört werden.
Oder aber der Service soll wirklich die ganze Zeit im Hintergrund laufen, dann kann ich den aber auch in der Activity erst starten.

Und was das subclassen von Application angeht, hab ich nur Google zitiert.
Und eigentlich geh ich davon aus, dass sie wissen was sie schreiben ;)
 
Zurück
Oben Unten