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