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