Middle
Care este ciclul de viață al serviciilor în Android?
sobes.tech AI
Răspuns de la AI
Serviciul nu are interfață cu utilizatorul și funcționează în fundal. Ciclul său de viață este gestionat de trei metode principale:
onCreate(): Este apelată pentru prima dată când serviciul este creat. Aici se face inițializarea.onStartCommand()/ metoda apelată la conectare (de exemplu,onBind()):onStartCommand()este apelată la pornirea serviciului prinstartService(). Returnează un steag care indică modul în care sistemul trebuie să restaureze serviciul dacă este ucis.onBind()este apelată când un client se conectează la serviciu prinbindService().onDestroy(): Este apelată când serviciul este distrus. Aici se eliberează toate resursele.
Există două tipuri de servicii care influențează ciclul de viață:
- Serviciu pornit (Started Service): Pornit prin
startService(). Funcționează până când este oprit în mod explicit custopSelf()saustopService(). Sistemul va încerca să îl repornească după distrugere dacăonStartCommand()a returnat steagul corespunzător. - Serviciu legat (Bound Service): Pornit prin
bindService(). Există atât timp cât cel puțin un client activ este conectat. Când toți clienții se deconectează, serviciul este distrus.onBind()returnează o implementare deIBinder, utilizată pentru interacțiunea cu serviciul.
Diagrama ciclului de viață:
Start Service --+--> onStartCommand() --+--> În funcțiune
| |
Bind Service ---+--> onBind() -----------+--> Legat
|
onCreate() -----+
|
+--> onRebind()
|
onDestroy() <---+-------------------------+---- Deconectat <--- unbindService()
|
+---- Oprit <--- stopSelf() / stopService()
Puncte cheie:
onCreate()este apelată o singură dată.onStartCommand()poate fi apelată de mai multe ori dacăstartService()este apelat repetat.- Serviciul rulează în mod implicit în thread-ul principal al UI. Operațiunile lungi trebuie efectuate într-un thread separat sau folosind
IntentService. - Serviciile legate au un ciclu de viață mai complex, în funcție de starea clienților.
Exemplu de onStartCommand():
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Execută anumite acțiuni
// De exemplu, începe o muncă în fundal
// Returnează steagul care determină comportamentul sistemului la distrugere
return START_STICKY; // Serviciul va fi restaurat dacă a fost ucis
}
Exemplu de onBind():
private final IBinder binder = new LocalBinder();
public class LocalBinder extends Binder {
MyService getService() {
// Returnează instanța serviciului pentru clienți
return MyService.this;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
// Apelată când toți clienții se deconectează
return super.onUnbind(intent);
}