Sobes.tech
Middle

Android-də xidmətlərin həyat dövrü nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Xidmətin istifadəçi interfeysi (UI) yoxdur və arxa planda işləyir. Onun həyat dövrü üç əsas metod ilə idarə olunur:

  • onCreate(): Xidmət ilk dəfə yaradıldıqda çağrılır. Burada ilkinləşdirmə həyata keçirilir.
  • onStartCommand() / bağlanma zamanı çağrılan metod (məsələn, onBind()): onStartCommand() startService() ilə xidməti başladarkən çağrılır. Bu, sistemin xidməti bağladıqda necə bərpa edəcəyini göstərən bayraq qaytarır. onBind() bindService() ilə müştəri xidməti ilə əlaqə qurarkən çağrılır.
  • onDestroy(): Xidmət məhv ediləndə çağrılır. Burada bütün resurslar azad edilir.

Həyat dövrünə təsir edən iki növ xidmət mövcuddur:

  • Başladılmış Xidmət (Started Service): startService() ilə başlayır. stopSelf() və ya stopService() ilə açıq şəkildə dayandırılana qədər işləyir. Sistem, onStartCommand() müvafiq bayraq qaytardıqda, onu məhv etdikdən sonra yenidən başlatmağa çalışacaq.
  • Əlaqəli Xidmət (Bound Service): bindService() ilə başlayır. Ən azı bir aktiv müştəri ona bağlı olduqda mövcuddur. Bütün müştərilər əlaqəni kəsdikdə, xidmət məhv edilir. onBind() IBinder tətbiqini qaytarır və bu, xidməti ilə əlaqə üçün istifadə olunur.

Həyat dövrü diaqramı:

        Start Service --+--> onStartCommand() --+--> İşə salınmış
                        |                         |
        Bind Service ---+--> onBind() -----------+--> Əlaqəli
                        |
        onCreate() -----+
                        |
                        +--> onRebind()
                        |
        onDestroy() <---+-------------------------+---- Kəsildi <--- unbindService()
                                                 |
                                                 +---- Dayandırıldı <--- stopSelf() / stopService()

Əsas nöqtələr:

  • onCreate() yalnız bir dəfə çağrılır.
  • onStartCommand() təkrarlanan çağrıla bilər, əgər startService() təkrar-təkrar çağırılırsa.
  • Xidmət, standart olaraq, əsas axında işləyir. Uzunmüddətli əməliyyatlar ayrı bir axında və ya IntentService istifadə edilərək həyata keçirilməlidir.
  • Əlaqəli xidmətlərin həyat dövrü daha mürəkkəbdir və müştərilərin vəziyyətindən asılıdır.

Misal üçün onStartCommand():

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // Bəzi əməliyyatları yerinə yetir
    // Məsələn, arxa planda işə başlamaq
    
    // Sistemə xidmətin məhv edilməsi zamanı necə davranacağını göstərən bayraq qaytarır
    return START_STICKY; // Xidmət məhv olunsa, yenidən bərpa olunacaq
}

Misal üçün onBind():

private final IBinder binder = new LocalBinder();

public class LocalBinder extends Binder {
    MyService getService() {
        // Müştərilər üçün xidmətin nümunəsini qaytarır
        return MyService.this;
    }
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return binder;
}

@Override
public boolean onUnbind(Intent intent) {
    // Bütün müştərilər əlaqəni kəsəndə çağrılır
    return super.onUnbind(intent);
}