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