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