App läuft permanent im HIntergrund - oder doch nicht?

R

renegade2k

Fortgeschrittenes Mitglied
8
Ich habe eine relativ simple App geschrieben, die eine Haupt-Activity und ein Service hat, der die eigene Position verfolgt.

Wenn die App gestartet wird und die Haupt-Activity geladen wird, wird "onCreate" der Service gestartet.
Code:
startService(new Intent(this, Track.class));
Die Track.class ist in der AndroidManifest auch als Service eingetragen
Code:
<service android:name=".Track" />
In dem Service wird "onCreate" die Ortung gestartet
Code:
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
 locationListener = new mylocationlistener();
 locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
Anschließend werden ein paar einfache Berechnungen durchgeführt, für die ich die Methoden selbst geschrieben habe.

Nun,wenn die App beendet wird (mit eine Button, der in der Haupt-Activity finish() aufruft), wird zunächst in der Haupt-Activity der Service abgemeldet
Code:
public void onDestroy() {
        super.onDestroy();
        stopService(new Intent(Main.this, Track.class));
    }
Und im Service wird der LocationListener abgemeldet
Code:
public void onDestroy() {
        super.onDestroy();
        locationManager.removeUpdates(locationListener);
    }
Ich habe in allen Methoden (location listener, alle meine selbst geschriebenen Methoden, in onCreate und onDestroy etc.)Debug-Nachrichten drin, sodass, wenn eine der Methoden ausgeführt wird, ich es in Logcat sofort sehe.
Und es ist nach dem Beenden nichts zu sehen!
Dennoch, wenn ich im Anwendungs-Menü von Android nachsehe, steht meine App als "ausgeführt" drin. Bzw. der Button "beenden erzwingen" ist durchgehend aktiv.
Auch wenn ich die Ap anschließend erneut starte, sind alle vorher vorgenommenen EIngaben gelöscht. Die Activity wird also ganz "frisch" erstellt.

Übersehe ich noch irgend etwas?
Und habe ich die Möglichkeit irgendwie zu sehen, was von der App noch im Hintergrund läuft? Denn wie erwähnt, habe ich ja eigentlich jede Methode markiert und keine von denen wird aufgerufen.
Oder ist es normal, dass die App an sich noch in der Liste auftaucht, bis Android sie irgendwann selbst beendet?
 
Zuletzt bearbeitet:
eine app wird erst komplett beendet, wenn android es für richtig hält.
 
Theoretisch ja schon.
Irgendwo las ich mal "leerer Speicher ist schlechter Speicher".

Dennoch macht es mich etwas stutzig.
Andere Apps sind ja auch, wenn man sie beendet, aus der Liste ausgeführter Apps raus.

Ich hatte jetzt so die Befürchtung, dass irgendwie noch der Listener im Hintergrund läuft, was dann natürlich zu ungewollten Energieverbrauch führen würde.

Ich weiss aber auch, dass es ein gewissen unterschied zwischen laufenden und aktiven Apps gibt. Nur weiss ich nicht, wie ich diesen erkenne. Also ob meine App nur "tot" im Speicher liegt, oder ob sie noch etwas macht.
Beim beenden wird definitiv "onDestroy" sowohl von der Activity, als auch vom Service aufgerufen, so viel kann ich sagen.
 
Zuletzt bearbeitet:
renegade2k schrieb:
Irgendwo las ich mal "leerer Speicher ist schlechter Speicher".
:lol: Das ist vom Context abhängig. Wird die Instanz nicht mehr benötigt, ist sie sogar schlecht, da bei Speichermangel wertvoller Speicher blockiert ist, der von anderen Prozessen sinnvoll genutzt werden könnte.
Ich hatte jetzt so die Befürchtung, dass irgendwie noch der Listener im Hintergrund läuft, was dann natürlich zu ungewollten Energieverbrauch führen würde.
Wird die onDestroy-Methode des Services wirklich aufgerufen? Die einzige zuverlässige Methode ist die onPause-Methode. Ich weiß allerdings nicht genau wie es bei einem Service aussieht. Die onDestroy-Mehtode wird meiner Meinung nach nur aufgerufen, wenn die App richtig gekillt wird, bzw. Android entscheidet, das die App nicht mehr benötigt wird. Ist dies der Fall beendet Android den Prozess und ruft dabei außerdem die onDestroy-Methode auf. Hier ist ein Auszug aus dem Developer-Portal.
In extreme cases, the system might simply kill your app process without calling the activity's final onDestroy() callback, so it's important you use onStop() to release resources that might leak memory.
Hier der link.
Ich weiss aber auch, dass es ein gewissen unterschied zwischen laufenden und aktiven Apps gibt. Nur weiss ich nicht, wie ich diesen erkenne. Also ob meine App nur "tot" im Speicher liegt, oder ob sie noch etwas macht.
Wird kein Hintergrund-Thread gestartet belegt die App lediglich Speicher im Hauptspeicher. Kannst ja mal an ein Paar stellen deiner App ins Log schreiben, die App dann starten und dann den Fokus der Aktivity verlassen. Die einzigen Methoden die dann augeführt werden sind Methoden, die von Android aufgerufen werden, z.B. weil die App länger nicht mehr im Vordergrund war. Das sind dann ausschließlich Methoden wie onPause, onStop oder onDestroy.
Beim beenden wird definitiv "onDestroy" sowohl von der Activity, als auch vom Service aufgerufen, so viel kann ich sagen.
Ruft die stopService-Methode wirklich die onDestroy-Methode des referenzierten Services auf. Ich bin mir ein wenig unsicher. Habe mein Smartphone gerade mal neu gestartet und sehe gerade, das sämtliche Prozesse mit gestartet wurden, also von sämtlichen Apps.
Werde mich bei Gelegenheit mal einlesen und sage dir dann bescheid. Solltest du was herausfinden würde ich mich freuen wenn du davon berichten könntest.
 
Wird die onDestroy-Methode des Services wirklich aufgerufen?
Ja, definitiv werden beide aufgerufen.
Ich habe in beiden onDestroy eine Log-Nachricht gehabt, die ich dann beim Beenden angezeigt kriege.

Seltsam ich aber auch, beim Neustart der App werden alle Eingabefelder zurück gesetzt.
In einigen Fällen aber, die ich so nicht mit Sicherheit reproduzieren kann, bleiben die berechneten Ausgaben stehen.
Es wird also augenscheinlich die Activity neu erstellt, die Objekte, die aber während des letzten Aufrufs erstellt wurden bleiben weiterhin bestehen.

Wenn ich nun ganz "hardcore" in das onDestroy "System.exit(0);" rein schreibe, beendet sich wohl die App, wie es soll. Sowas sollte man aber vermeiden, soweit ich es gelesen habe, da man damit wieder in dieses automatische Managrement des Speichers von Android eingreift
 

Ähnliche Themen

S
Antworten
8
Aufrufe
510
swa00
swa00
Manny87
  • Manny87
Antworten
11
Aufrufe
161
swa00
swa00
R
  • Robby1950
2
Antworten
23
Aufrufe
1.007
Robby1950
R
Zurück
Oben Unten