Service ohne Aufgabe reicht aus um App sehr lange am Leben zu halten (?)

H

Hungrig

Erfahrenes Mitglied
37
Hallo,

ich experimentiere etwas mit einer App, die im Hintergrund Netzwerkoperationen durchführt. Da ich es langsam angehen wollte, habe ich das ganze erstmal ohne Service gemacht und die Netzwerkoperationen in einen Thread ausgelagert. Android hat dann meine App öfters einfach mal so beendet (auch wenn nur der Home-Screen zu sehen war).

Nun habe ich zum Test erstmal einen Service integriert, der nur gestartet wird und sonst gar nichts macht. Und siehe da, die App bleibt immer Aktiv und natürlich reagiert sie auf das Netzwerk.
Zum weiteren Testen habe ich im UI-Thread 50 MB Speicher allokiert um es wahrscheinlicher zu machen, dass die App beendet wird, wenn eine andere App den Speicher braucht. Es wird mir im Taskmanager auch ingesamt ca. 60 MB von meiner App als verwendet angezeigt.
Starte ich nun eine speicherintensive Anwendung, so wird erst diese beendet, meine App läuft trotz der fast 60 MB unbeeindruckt weiter.

Nachdem ich den Rest schon implementiert habe und es zusätzlich Aufwand ist das ganze für einen Service umzuschreiben, frage ich mich, ob das überhaupt notwendig ist. Wie ich gemerkt habe, läuft die App ja unbeeindruckt weiter, obwohl der Service nur gestartet ist.

Was meint ihr dazu?

PS: Man sollte für den Fall von Hintergrund-Operationen nie mit "bound-Services" arbeiten, denn hier wird der Service auch einfach beendet. Theoretisch existiert er zwar so lange, bis die unbind Methode aufgerufen wird, aber wenn die App vom System beendet wird, wird implizit ein unbind durchgeführt und der Service ist auch weg. Außerdem wird ein mittels bound-Service erzeugter Dienst nicht unter Einstellungen -> Anwendungen -> Laufende Dienste angezeigt. Leider ist das nirgends so klar formuliert, erst wenn man es selbst ausprobiert hat, kann man die Dokumentation auf diese Art und Weiße lesen, dass bound-Services für Hintergrund-Operationen ungeeignet sind.


EDIT: Mittlerweile wurde die App unterwartet beendet, aber der Dienst läuft weiter, wie man jedoch sieht reicht es zum Einstieg (z.B. während der Entwicklung) vollkommen aus, einen leeren Service zu erstellen um die App länger am Leben zu lassen.
Ob der Dienst noch läuft, kann man am einfachsten mit folgendem Code Testen. Man nimmt Telenet <IP> 2000 um eine Verbindung auf Port 2000 zu öffnen. Jeden Buchstaben, den man eingibt, sieht man nun doppelt. Vorraussetzung: Das Handy ist im eigenen WLAN und dessen IP-Adresse ist bekannt:

Code:
public void onCreate()
    {
        System.out.println("On Create Service");

        Thread t1 = new Thread(new Runnable()
        {
            ServerSocket serverSocket;
            Socket verbindungsSocket;
            public void run()
            {
                try
                {
                    InetAddress inetAddress =InetAddress.getByName("0.0.0.0");
                    System.out.println(inetAddress.getHostAddress());
                    serverSocket = new ServerSocket(2000);
                    serverSocket.setSoTimeout(0); //Kein Timeout
                    System.out.println(serverSocket.getSoTimeout());

                    while(true)
                    {        
                        
                        verbindungsSocket = serverSocket.accept();
                        System.out.println("Verbindung erhalten");

                        InputStream in = verbindungsSocket.getInputStream();

                        OutputStream os = verbindungsSocket.getOutputStream();

                        int temp;
                        while((temp = in.read())!=0)
                        {
                            os.write(temp);
                        }


                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
        t1.start();

    }
 
Zuletzt bearbeitet:

Ähnliche Themen

R
  • Robby1950
2
Antworten
23
Aufrufe
1.044
Robby1950
R
Manny87
  • Manny87
Antworten
11
Aufrufe
182
swa00
swa00
S
  • sorenn
Antworten
0
Aufrufe
40
sorenn
S
Zurück
Oben Unten