Sobes.tech
Middle

Ի՞նչ է Android-ում ծառայությունների կյանքի ցիկլը։

sobes.tech AI

Պատասխան AI-ից

Ծառայությունը չունի UI և աշխատում է ֆոնային ռեժիմում: Նրա կյանքի ցիկլը կառավարվում է երեք հիմնական մեթոդներով՝

  • onCreate(): Կոչվում է առաջին անգամ, երբ ծառայությունը ստեղծվում է: Այստեղ կատարվում է ինիցիալիզացիան:
  • onStartCommand() / մեթոդ, որը կոչվում է կապի ժամանակ (օրինակ, onBind()): onStartCommand() կոչվում է ծառայության մեկնարկի ժամանակ startService() մեթոդով: Վերադարձնում է նշան, որը ցույց է տալիս, թե ինչպես պետք է համակարգը վերականգնի ծառայությունը, եթե այն կոտրվի: onBind() կոչվում է, երբ հաճախորդը կապվում է ծառայությանը bindService() մեթոդով:
  • onDestroy(): Կոչվում է, երբ ծառայությունը ոչնչացվում է: Այստեղ ազատվում են բոլոր ռեսուրսները:

Կան երկու տեսակի ծառայություններ, որոնք ազդում են կյանքի ցիկլի վրա:

  • Սկսված ծառայություն (Started Service): Սկսվում է startService() մեթոդով: աշխատում է մինչև որ այն բացահայտորեն չդադարեցվի stopSelf() կամ stopService() մեթոդներով: Սիստեմը փորձելու է վերականգնել այն, եթե այն ոչնչացվի, եթե onStartCommand() վերադարձնի համապատասխան նշան:
  • Կապված ծառայություն (Bound Service): Սկսվում է bindService() մեթոդով: Կա այնքան ժամանակ, քանի դեռ առնվազն մեկ ակտիվ հաճախորդ կապված է նրա հետ: Երբ բոլոր հաճախորդները անջատվում են, ծառայությունը ոչնչացվում է: onBind() վերադարձնում է IBinder իրականացմանը, որը օգտագործվում է ծառայության հետ փոխազդելու համար:

Ցիկլի գրաֆիկը՝

        Start Service --+--> onStartCommand() --+--> Աշխատում է
                        |                         |
        Bind Service ---+--> onBind() -----------+--> Կապված
                        |
        onCreate() -----+
                        |
                        +--> onRebind()
                        |
        onDestroy() <---+-------------------------+---- Անջատված <--- unbindService()
                                                 |
                                                 +---- Դադարեցված <--- stopSelf() / stopService()

Հիմնական կետեր՝

  • onCreate() կոչվում է միայն մեկ անգամ:
  • onStartCommand() կարող է կոչվել շատ անգամ, եթե startService() կրկնակի կանչվի:
  • Ծառայությունը աշխատում է հիմնական հոսքում UI-ով ըստ նախնական կարգավորումների: Երկարատև գործողությունները պետք է կատարվեն առանձին հոսքում կամ IntentService-ի օգտագործմամբ:
  • Կապված ծառայությունները ունեն ավելի բարդ կյանքի ցիկլ, որը կախված է հաճախորդների վիճակից:

Օրինակ onStartCommand():

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // Կատարել որոշ գործողություններ
    // Օրինակ, սկսել ֆոնային աշխատանք
    
    // Վերադարձնել նշան, որը որոշում է, թե ինչպես պետք է համակարգը վարվել ծառայության ոչնչացման ժամանակ
    return START_STICKY; // Ծառայությունը վերականգնվելու է, եթե այն ոչնչացվի
}

Օրինակ onBind():

private final IBinder binder = new LocalBinder();

public class LocalBinder extends Binder {
    MyService getService() {
        // Վերադարձնել ծառայության օրինակը հաճախորդների համար
        return MyService.this;
    }
}

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

@Override
public boolean onUnbind(Intent intent) {
    // Կոչվում է, երբ բոլոր հաճախորդները անջատվում են
    return super.onUnbind(intent);
}