Sobes.tech
Middle

Ի՞նչ է Android-ում ֆոնային ծառայությունը (առաջնային ծառայություն)։

sobes.tech AI

Պատասխան AI-ից

Ֆոնային ծառայությունը (foreground service) — դա Android-ում ծառայության տեսակ է, որն ունի բարձրացված առաջնահերթություն և տեսանելի է օգտվողին: Այն իրականացնում է այն գործառույթները, որոնք նկատելի են օգտվողի համար և չպետք է ընդհատվեն մարտկոցի խնայողության կամ հիշողության պակասի դեպքում:

Հիմնական հատկանիշները՝

  • Տեղադրում է մշտական ծանուցում ծանուցումների տարածքում: Օգտվողը պետք է կարողանա տեսնել, որ ծառայությունը գործարկված է, և հնարավոր է՝ փոխազդել դրա հետ:
  • Սիստեմը քիչ հավանականությամբ կդադարեցնի ֆոնային ծառայությունը՝ համեմատած սովորական ֆոնային ծառայության կամ հոսքի, քանի որ այն ունի բարձր առաջնահերթություն:
  • Պահանջում է հատուկ թույլտվություն FOREGROUND_SERVICE:
  • Օգտագործվում է երաժշտություն նվագելու, գտնվելու վայրի հետևելու, տվյալների սինխրոնիզացման համար իրական ժամանակում:

Կյանքի ցիկլը՝

  1. Սկսվում է startForegroundService()-ի միջոցով:
  2. Անհրաժեշտ է 5 վայրկյանի ընթացքում կանչել startForeground(notificationId, notification)՝ ծառայությունը ֆոնային ռեժիմ տեղափոխելու համար: Հակառակ դեպքում համակարգը կարող է կանգնեցնել ծառայությունը և նետել ForegroundServiceDidNotStartInTimeException:
  3. Դադարեցվում է stopSelf() կամ stopService()-ի միջոցով այլ կոմպոնենտից կամ օգտագործողի կողմից ծանուցման միջոցով: Դադարեցման ժամանակ անհրաժեշտ է կանչել stopForeground(bool removeNotification)՝ ծանուցումը հեռացնելու համար:

Օրինակ՝

// Հասանելիություն ստանալու համար
ActivityCompat.requestPermissions(
    this,
    arrayOf(Manifest.permission.FOREGROUND_SERVICE),
    REQUEST_CODE_FOREGROUND_SERVICE
)

// Հետադարձ կապում, թույլտվությունը ստանալուց հետո կամ եթե այն արդեն կա
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)

Սերվիսի ներսում՝

// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    val notification: Notification = createNotification() // մեթոդ ծանուցում ստեղծելու համար
    startForeground(NOTIFICATION_ID, notification)
    // Այստեղ սկսվում է ծառայության գործառույթի իրականացման գործընթացը
    return START_STICKY // կամ այլ համապատասխան նշան
}

override fun onDestroy() {
    stopForeground(true) // Ծանուցումը հեռացնելու համար
    // ռեսուրսների մաքրման
    super.onDestroy()
}