Forum: PC-Programmierung Android: Wozu Services?


von Frank (Gast)


Lesenswert?

Wieso braucht man in Android Services wenn es doch sowieso immer nur ein 
Prozess ist. Ich kenne eigentlich Prozesse und Services immer nur als 
eigene Programme die ausgeführt werden wie z.B. die Klasse Thread das 
macht. Sie erstellt einen Thread, der neben dem Hauptprogramm läuft.

Also wieso werden Services sehr häufig benutzt wenn es doch nur viel 
Schreibarbeit ist. Ich könnte mir vorstellen wegen der Übersicht, aber 
das war es auch schon...

von bluppdidupp (Gast)


Lesenswert?

Activities (und dessen Threads) darf Android theoretisch jederzeit 
beenden, wenn es meint das wäre notwendig (auch wenn es die Threads in 
der Praxis selten killt). Bei Services tut Android das nicht.

von (prx) A. K. (prx)


Lesenswert?

Auch einige Services können vom System beendet werden, wenns knapp wird. 
Aber Services sind Hintergrunddienste, die im Regelfall dauernd laufen, 
und die bei unfreiwilliger Beendigung meistens automatisch wieder 
starten.

von Frank (Gast)


Lesenswert?

A. K. schrieb:
> Aber Services sind Hintergrunddienste, die im Regelfall dauernd laufen,
> und die bei unfreiwilliger Beendigung meistens automatisch wieder
> starten.

Ja aber eine Service Klasse hängt doch immer von der Acticvity ab die 
den Service startet. Solange der Service in einer Schleife Dinge 
durchführt ist auch die Activity gefroren. Er läuft zwar dann weiter hat 
aber keine Funktion bis er wieder gestartet wird.

von (prx) A. K. (prx)


Lesenswert?


von Frank (Gast)


Lesenswert?

A. K. schrieb:
> http://techtej.blogspot.de/2011/03/android-thread-...

Ok, also ist die Lösung ein Thread im Service zu erstellen.
Danke

von Frank (Gast)


Lesenswert?

So hab das jetzt mal geschrieben und will wissen ob das eh so passt oder 
obs bessere Vorschläge gibt:

Das was der Thread machen soll:
1
package at.example.hello.processes;
2
3
import android.util.Log;
4
5
public class ServiceArbeiter implements Runnable {
6
7
  public void run() {
8
    long zeitVorher = System.currentTimeMillis();
9
    while((System.currentTimeMillis() - zeitVorher) < 10000);
10
    
11
    for(int i = 0; i < 10; i++)
12
      Log.d("ServiceArbeiter", "i=:" + i);
13
  }
14
15
}

Und im Service wird er aufgerufen:
1
package at.example.hello;
2
3
import android.app.Service;
4
import android.content.Intent;
5
import android.os.IBinder;
6
import android.util.Log;
7
import at.example.hello.processes.ServiceArbeiter;
8
9
public class ServiceAc extends Service {
10
11
  @Override
12
  public IBinder onBind(Intent intents) {
13
    // TODO Auto-generated method stub
14
    return null;
15
  }
16
  
17
  @Override
18
  public void onCreate() {
19
    Log.d("ServiceApp", "onCreate aufgerufen...");
20
    super.onCreate();
21
  }
22
  
23
  @Override
24
  public void onDestroy() {
25
    Log.d("ServiceApp", "onDestroy aufgerufen...");
26
    super.onDestroy();
27
  }
28
29
  @Override
30
  public void onStart(Intent intent, int startId) {
31
    Log.d("ServiceApp", "onStart aufgerufen...");
32
    super.onStart(intent, startId);
33
    
34
    ServiceArbeiter arbeiter = new ServiceArbeiter();
35
    Thread neuerThread = new Thread(arbeiter);
36
    neuerThread.start();
37
  }
38
39
}

und funktionieren tuts auch;)

Verbesserungsvorschläge?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.