Sobes.tech
Junior

Android-də Service istifadə etmisinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, istifadə etmişəm. Service tətbiqin bir komponentidir və istifadəçi interfeysindən asılı olmayan, fon rejimində uzunmüddətli əməliyyatları yerinə yetirə bilər. Service-in öz UI-si yoxdur.

Service üç vəziyyətdə ola bilər:

  1. Başladılmış: Service startService() çağırışı ilə başlayır. O, onu başlatmış komponentdən müstəqil işləyir. Adətən, bir dəfəlik əməliyyatlar üçün istifadə olunur, məsələn, fayl yükləmək.
  2. Qoşulmuş: Service bindService() çağırışı ilə başlayır. Bu, onu çağırmış komponentə bağlıdır. Bu, tətbiq komponentlərinin Service ilə qarşılıqlı əlaqə qurmasına imkan verir. Service, ona bağlı komponentlər olduğu müddətcə yaşayır.
  3. Əsas prioritet: Service startForeground() çağırışı ilə başlayır. İstifadəçiyə görünən əməliyyatlar yerinə yetirir (məsələn, musiqi ifa etmək). Sistem, yaddaş azlığı səbəbindən, əsas prioritetli Service-i daha az məhv edir. Bildiriş tələb edir.

Əsas həyat dövrü metodları:

  • onCreate(): Service ilk dəfə yaradıldıqda çağırılır.
  • onStartCommand() və ya onBind(): Başlatma üsulundan asılıdır.
    • onStartCommand(): Hər dəfə komponent startService() çağıranda çağırılır.
    • onBind(): bindService() çağırıldıqda çağırılır. Əlaqə üçün IBinder qaytarır.
  • onDestroy(): Service məhv ediləndən əvvəl çağırılır.

Fon əməliyyatı üçün Started Service istifadə nümunəsi:

class MyStartedService : Service() {

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        // Uzunmüddətli əməliyyatı ayrı bir thread-də yerinə yetirmək
        Thread {
            // Məsələn, məlumat yükləmək
            Log.d("MyStartedService", "Service başladı")
            try {
                Thread.sleep(5000) // İşin simulyasiyası
            } catch (e: InterruptedException) {
                Thread.currentThread().interrupt()
            }
            Log.d("MyStartedService", "Əməliyyat tamamlandı")
            stopSelf(startId) // Tapşırıq yerinə yetirildikdən sonra servisi dayandırmaq
        }.start()

        return START_STICKY // və ya START_NOT_STICKY, START_REDELIVER_INTENT
    }

    override fun onBind(intent: Intent?): IBinder? {
        return null // Qoşulmuş Service istifadə edilmir
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d("MyStartedService", "Service məhv edildi")
    }
}

Uzunmüddətli əməliyyatlar üçün, təminat və ayrı bir prosesdə işləmək üçün, Service üzərində qurulan WorkManager istifadə etmək tövsiyə olunur, çünki daha etibarlı və çevik API təmin edir.