# Android Game Background Service



## neulii (9. Okt 2018)

Hallo zusammen!
Ich versuche ein Spiel zu programmieren. Das spiel soll auch wenn die App geschlossen bzw im Hintergrund ist weiter Rohstoffe abbauen.
Mein Problem: Ein Background Service wird von Android gekillt wenn das OS es für nötig hält (wegen Speicher usw...), und mein Miner-Service läuft im Hintergrund nicht mehr weiter.
Jetzt frage ich mich wie wird sowas normalerweise programmiert? Wird so ein Vorgang wie "minen" in einem Background Service weiter berechnet und dieser irgend wie am Leben gehalten?
Oder was ich mir auch vorstellen könnte dass der Zeitstempel vom verlassen/schließen der App genommen wird und beim erneuten Öffnen/in Erscheinung treten der App einfach die Differenz berechnet und somit der Fortschritt errechnet wird.
Vielleicht könnt ihr mir weiter helfen wie so etwas normalerweise umgesetzt wird.


----------



## mihe7 (9. Okt 2018)

Lies Dir mal https://developer.android.com/guide/components/services durch, speziell START_STICKY und https://developer.android.com/guide/components/services#Foreground


----------



## neulii (9. Okt 2018)

START_STICKY hab ich schon versucht, bringt leider nichts. Ebenso wie 
START_REDELIVER_INTENT.
Service wird nach einiger Zeit immer gestoppt.


----------



## mihe7 (9. Okt 2018)

Und was ist mit "foreground service is a service that the user is actively aware of and isn't a candidate for the system to kill when low on memory"?


----------



## Robat (9. Okt 2018)

Könnte das hier vielleicht eine Rolle spielen?


> The Android system force-stops a service only when *memory is low* and it must recover system resources for the activity that has user focus.


----------



## neulii (9. Okt 2018)

mihe7 hat gesagt.:


> Und was ist mit "foreground service is a service that the user is actively aware of and isn't a candidate for the system to kill when low on memory"?


danke für den tipp, foreground services habe noch nicht bedacht!



Robat hat gesagt.:


> Könnte das hier vielleicht eine Rolle spielen?


macht es auch wenn ich sonstige apps vorher schliesse.
Abgesehen davon, es gibt doch viele spiele die man schliesst oder in den Hintergrund bringt. Einen Tag später z.b. ist der Spielfortschritt um genau diesen tag fortgeschritten, unabhängig von freiem Speicher. 
Darum möchte ich ja wissen wird so eine Problematik evt. anders gelöst als mit Services.


----------



## Robat (9. Okt 2018)

Würde mal behaupten, dass diese Spiele nicht die ganze Zeit über im Hintergrund laufen, sondern das über eine (serverseitige) Berechnung läuft sobald die App wieder geöffnet wird.
Die Aussage ist aber mit Vorsicht zu genießen.


----------



## neulii (9. Okt 2018)

Wobei es auch Offline Spiele (konkret: tiny towers) gibt die beim öffnen den neuen fortschritt präsentieren.
Hab das Spiel runtergeklappt und laufende Dienste kontrolliert -> läuft kein Dienst.


----------



## mihe7 (9. Okt 2018)

Was die Spiele und den Fortschritt betrifft: könnte so etwas nicht per https://developer.android.com/reference/android/app/AlarmManager realisiert sein?


----------



## neulii (11. Okt 2018)

Also ich hab jetzt sehr viel gestöbert in allen möglichen Foren und Seiten und habe herausgefunden dass wie von mir schon vermutet einfach der Spielfortschritt im Hintergrund errechnet wird mit der Zeit die die App im Hintergrund war!
Danke für die flotten Antworten!!


----------



## mihe7 (11. Okt 2018)

neulii hat gesagt.:


> einfach der Spielfortschritt im Hintergrund errechnet wird mit der Zeit die die App im Hintergrund war!


Das soll vermutlich


neulii hat gesagt.:


> dass der Zeitstempel vom verlassen/schließen der App genommen wird und beim erneuten Öffnen/in Erscheinung treten der App einfach die Differenz berechnet und somit der Fortschritt errechnet wird.


bedeuten?


----------



## neulii (11. Okt 2018)

genau!


----------

