Middle
Milline on Androidi teenuste elutsükkel?
sobes.tech AI
Vastus AI-lt
Teenusel ei oma UI-d ja töötab taustal. Selle elutsükkel juhitakse kolme peamise meetodiga:
onCreate(): kutsutakse esimest korda, kui teenus luuakse. Siin toimub initsialiseerimine.onStartCommand()/ meetod, mida kutsutakse sidumise ajal (näiteksonBind()):onStartCommand()kutsutakse, kui teenus käivitataksestartService()meetodiga. See tagastab lipu, mis näitab, kuidas süsteem peaks teenust taastama, kui see tapetakse.onBind()kutsutakse, kui klient ühendub teenusegabindService()meetodiga.onDestroy(): kutsutakse, kui teenus hävitatakse. Siin vabastatakse kõik ressursid.
On olemas kaks teenuse tüüpi, mis mõjutavad elutsüklit:
- Algatatud teenus (Started Service): käivitatakse
startService()meetodiga. Töötab seni, kuni see on selgelt peatatudstopSelf()võistopService()meetodiga. Süsteem püüab seda taaskäivitada pärast hävitamist, kuionStartCommand()tagastas sobiva lipu. - Sidus teenus (Bound Service): käivitatakse
bindService()meetodiga. Eksisteerib seni, kuni vähemalt üks aktiivne klient on ühendatud. Kui kõik kliendid lahti ühenduvad, hävitatakse teenus.onBind()tagastabIBinderrealiseeringu, mida kasutatakse teenusega suhtlemiseks.
Elutsükli diagramm:
Start Service --+--> onStartCommand() --+--> Käivitatud
| |
Bind Service ---+--> onBind() -----------+--> Sidus
|
onCreate() -----+
|
+--> onRebind()
|
onDestroy() <---+-------------------------+---- Lahti ühendatud <--- unbindService()
|
+---- Peatatud <--- stopSelf() / stopService()
Peamised punktid:
onCreate()kutsutakse ainult kord.onStartCommand()võib kutsuda kordades, kuistartService()kutsutakse uuesti.- Teenus töötab peamise UI-voo peal vaikimisi. Pikaajalised operatsioonid peaksid toimuma eraldi niidil või kasutades
IntentService. - Piesaistatud teenustel on keerulisem elutsükkel, mis sõltub klientide olekust.
Näide onStartCommand():
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Teha mõningaid toiminguid
// Näiteks alustada taustatööd
// Tagastada lipu, mis määrab, kuidas süsteem peaks teenust taastama, kui see hävitatakse
return START_STICKY; // Teenus taastatakse, kui see tapetakse
}
Näide onBind():
private final IBinder binder = new LocalBinder();
public class LocalBinder extends Binder {
MyService getService() {
// Tagastame teenuse eksemplari klientidele
return MyService.this;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
// Tõrjutakse, kui kõik kliendid on lahti ühendatud
return super.onUnbind(intent);
}