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);
}