Android tətbiqlərinin inkişafında Service-dən istifadə etdinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
Bəli, istifadə etdim. Android-də Service uzunmüddətli əməliyyatları istifadəçi interfeysindən kənarda yerinə yetirmək üçün istifadə olunur.
Əsas istifadə ssenariləri:
- Fon rejimində musiqi ifa etmək.
- Faylları yükləmək.
- Server ilə məlumatların sinxronizasiyası.
- Mövqeyin izlənməsi.
Service növləri:
- Started Service: Tətbiq komponenti (məsələn, Activity) tərəfindən başlatılır və müstəqil işləyir.
stopSelf()və yastopService()metodu ilə dayandırılır. - Bound Service: Müştəri-server interfeysi təmin edir. Komponentlər
bindService()metodu ilə Service-ə bağlanır vəIBindervasitəsilə onunla qarşılıqlı əlaqə qurur. Bütün komponentlər bağlandıqda dayandırılır. - Foreground Service: İstifadəçiyə görünən əməliyyatları yerinə yetirir (məsələn, musiqi ifası).
startForeground()ilə başlatılır və bildiriş tələb edir. Sistem belə Service-ə daha az müdaxilə edir.
Started Service-in həyat dövrü:
onCreate(): Service yaradılır.onStartCommand(): Service-ə hər çağırışda çağırılır.onDestroy(): Service məhv edilir.
Bound Service-in həyat dövrü:
onCreate(): Service yaradılır.onBind(): Müştəri Service-ə bağlananda çağırılır.IBinderqaytarır.onUnbind(): Bütün müştərilər bağlandıqda çağırılır.onDestroy(): Service məhv edilir.
Started Service-in işə salınması nümunəsi:
// MainActivity.kt
import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
// Sizin UI
// Service-in işə salınması nümunəsi
val serviceIntent = Intent(this, MyStartedService::class.java)
startService(serviceIntent)
}
}
}
Sadə Started Service nümunəsi:
// MyStartedService.kt
import android.app.Service
import android.content.Intent
import android.os.IBinder
import android.util.Log
class MyStartedService : Service() {
private val TAG = "MyStartedService"
override fun onCreate() {
super.onCreate()
Log.d(TAG, "onCreate")
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.d(TAG, "onStartCommand")
// Uzunmüddətli əməliyyatı fon rejimində yerinə yetirir
Thread {
for (i in 0..10) {
Log.d(TAG, "Iteration $i")
try {
Thread.sleep(1000)
} catch (e: InterruptedException) {
e.printStackTrace()
}
}
stopSelf() // Tapşırıq tamamlandıqda Service-i dayandırır
}.start()
return START_STICKY // Service-ı sistem öldürsə, yenidən başlat
}
override fun onDestroy() {
super.onDestroy()
Log.d(TAG, "onDestroy")
}
override fun onBind(intent: Intent?): IBinder? {
// Started Service üçün null qaytarırıq
return null
}
}
Əhəmiyyətlidir ki, Service standart olaraq əsas axında işləyir. Uzunmüddətli və bloklayıcı əməliyyatlar üçün ayrıca axınlar və ya Kotlin korotinləri istifadə etmək lazımdır ki, UI bloklanmasın.
Uzunmüddətli tapşırıqlarla işləyərkən WorkManager-dən istifadə etmək daha üstün olur, çünki bu, daha çevik və etibarlı gecikmiş və zəmanətli tapşırıqlar üçün yanaşma təmin edir. WorkManager sistem məhdudiyyətlərini nəzərə alır və tapşırıqları yerinə yetirir, hətta tətbiq bağlanıb və ya cihaz yenidən başlatılıbsa belə.