Programm mit Local Service wird sporadisch beendet

  • 2 Antworten
  • Neuester Beitrag
Diskutiere Programm mit Local Service wird sporadisch beendet im Android App Entwicklung im Bereich Betriebssysteme & Apps.
F

Fl4sh

Neues Mitglied
Hallo!

Ich habe ein Programm geschrieben, welches kontinuierlich den Lautstärkepegel misst und diesen für eine spätere Auswertung in einer Datenbank speichert und die Daten zu einem Server schickt. Dies ist Teil meiner Bachelorarbeit im Studiengang Informatik.

Neben der GUI habe ich zum Sammeln, Bearbeiten und Speichern der Daten einen Service geschrieben. Ich habe lange überlegt, ob ich einen LocalService oder Global Service verwende. Letztendlich habe ich einen Lokalen verwendet, da dieser 1. einfacher zu implementieren war und 2. einige Foren im Netz schrieben, ein globaler Service sollte nur verwendet werden, wenn wirklich mehrere Programme auf die Daten zugreifen sollen. D.h. GUI und "Datensammel-Service" laufen im gleichen Prozess.

Das Programm soll zur Langzeitmessung in Versuchen verwendet werden. Es soll getestet werden in wie weit Handys als Sensoren verwendet werden können. Nur leider wird das Programm sporadisch beendet. Den Grund hierfür habe ich leider nicht heausfinden können (JEmand eine Idee, wie man das macht?). Ich habe jedoch die Vermutung, dass Android das Programm irgendwann beendet. Wie kann ich das verhindern? Kann ich das Programm schützen oder mit einer höheren Proirität ausführen lassen?
Letztendlich ist es ja ein Hintergrund-Service, der ständig laufen sollte.

Danke! :)
Fl4sh
 
FelixL

FelixL

Ehrenmitglied
Willkommen im Forum!

a) Welche Android Version?
b) Services werden beendet wenn das Gerät Arbeitsspeicher braucht und Android den Service für unwichtig empfindet, z.B. weil die App dazu ewig nicht auf war ;)
Es gibt bei neueren Android-Versionen afaik die Möglichkeit einen Hintergrund-Service sicher am Leben zu erhalten, dafür muss aber in der Statuszeile ein Icon angezeigt werden.

Tipp 1: http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle
For started services, there are two additional major modes of operation they can decide to run in, depending on the value they return from onStartCommand(): START_STICKY is used for services that are explicitly started and stopped as needed, while START_NOT_STICKY or START_REDELIVER_INTENT are used for services that should only remain running while processing any commands sent to them. See the linked documentation for more detail on the semantics.
START_STICKY wird afaik wieder gestartet sobald möglich, wenn er beendet wurde.

Tipp 2: http://developer.android.com/guide/topics/fundamentals/services.html#Foreground
A foreground service is a service that's considered to be something the user is actively aware of and thus not a candidate for the system to kill when low on memory. A foreground service must provide a notification for the status bar, which is placed under the "Ongoing" heading, which means that the notification cannot be dismissed unless the service is either stopped or removed from the foreground.
Das funktioniert ab Android 2.0 sicher, hat aber die Notification in der Statuszeile.
 
Zuletzt bearbeitet:
F

Fl4sh

Neues Mitglied
Hi!

Sorry für die späte Antwort! Es handelt sich um v2.2, aber habe das Problem mit deiner Hilfe scheinbar gelöst.
Ich benutze jetzt nicht nur Bind_service, sondern starte den service noch explizit mit START_STICKY.
Auch habe ich jetzt ein Icon in der Statuszeile und alles klappt. Juhuu! :D danke! :)