Service einer App wird mit GUI vom System abgeschossen

  • 3 Antworten
  • Neuester Beitrag
Diskutiere Service einer App wird mit GUI vom System abgeschossen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
B

bruegae

Neues Mitglied
Hallo zusammen,
meine App verwendet einige Activities sowie einen Service. Der Service soll ein solcher sein, der immer läuft und nur bei Speichermangel beendet werden soll.
Wenn ich normal mit dem Home-Button auf den Startbildschirm zurückkehre, kann ich im "TaskManager" meine App noch als laufendes Programm finden. Ebenso unter Einstellungen -> Anwendungen -> laufende Dienste ist mein Service zu finden.
Nach einiger Zeit kicket das Android System mein Programm aus der "Aktive Anwendungen" Liste im Taskmanager. So solls ja sein. Allerdings wird damit gleichzeitig auch mein Service gekillt. Das möchte ich aber nicht! Der soll für immer und ewig laufen, völlig unabhängig von den Activities.

Hier der Code von meinem Service:
Code:
public class SilenceService extends Service {

    private volatile boolean threadsRunning = false;
    private int startId;
    

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public void onCreate() {
        
        Log.d("ASD", "ss start cmd");
        threadsRunning = true;

        Thread thread1 = new Thread(new Runnable() {

            @Override
            public void run() {
                

                while (threadsRunning) {
                    preferences.loadFromDB();

                    try {

                            work();
                            // HIER WIRD GEARBEITET
                            
                            Thread.sleep(preferences.getCheckintervalInSeconds() * 1000);


                    } catch (InterruptedException e) {
                        Log.d("ASD", "SERVICE SLEEP EXcEPTION");
                    }
                }
            }
        });

        thread1.start();
        super.onCreate();
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        this.startId = startId;

        return START_REDELIVER_INTENT;
    }

    private void stop() {
        Log.d("ASD", "SERVICE stop");
        stopSelf(startId);
    }

    @Override
    public void onDestroy() {
        threadsRunning = false;
        Log.d("ASD", "SERVICE destroy");
        super.onDestroy();
    }
}
So starte ich den Service (aktuell noch manuell durch einen Buttonclick in einer der Activities):
Code:
startService(new Intent(thisContext, SilenceService.class));
 
N

Neeldarax

Fortgeschrittenes Mitglied
Hallo bruegae,

dein Service wird aus der Activity gestertet und beendet sich mit deiner APP.

Hintergrundinformationen zu Service - startService():

  • starten im Hintergrund
  • beendet sich spätestens mit dem Programm, dass ihn gestartet hat, selbst
  • im Normalfall wird eine Aufgabe erledigt, ohne ein Ergebniss zurückzuliefern
QUELLE - das hab ich wo gefunden gehabt.

Wenn es eine Möglichkeit gibt dein BroadcastReceiver ewig am Start zu haben, sollte es eig. auch mit einem Service gehen. Kenn gerad die Lösung nicht, aber dein Problem sollte damit erklärt sein - StartService(..) ist nicht der passende Ansatz.

regards
 
J

JanF

Stammgast
Probier es mal mit startForeground(int, Notification)

A started service can use the startForeground(int, Notification) API to put the service in a foreground state, where the system considers it to be something the user is actively aware of and thus not a candidate for killing when low on memory. (It is still theoretically possible for the service to be killed under extreme memory pressure from the current foreground application, but in practice this should not be a concern.)
Mehr Details und Quelle:
Service | Android Developers
 
B

bruegae

Neues Mitglied
Also wenn ein Dienst beendet werden würde, wenn die zugehörige Anwendung beendet wird, wäre das Ganze ja irgendwie sinnlos. Das wäre ja wie wenn der Search Indexer Service von Windows nur laufen würde wenn man aktuell gerade etwas sucht. Dann wäre das ganze Dienst-Konzept ja irgendwie sinnlos?

Mit startForeground habe ich es tatsächlich geschafft meinen Dienst über Nacht am Leben zu erhalten, wärend das Programm im Task Manager verschwunden ist.
Auf startForeground bin ich gestern abend noch gestoßen, aber trotzdem Danke an JanF!!
 
Ähnliche Themen - Service einer App wird mit GUI vom System abgeschossen Antworten Datum
8
6
8