Sobes.tech
Middle

Kas ir fonu pakalpojums (priekšplāna pakalpojums) Android?

sobes.tech AI

Atbilde no AI

Fona pakalpojums (foreground service) ir Android veids pakalpojums ar paaugstinātu prioritāti, kas ir redzams lietotājam. Tas veic uzdevumus, kas ir pamanāmi lietotājam un nedrīkst tikt pārtraukts, taupot akumulatoru vai trūkstot atmiņas.

Galvenās īpašības:

  • Pastāvīga paziņojuma parādīšana paziņojumu joslā. Lietotājs jāspēj redzēt, ka pakalpojums darbojas, un iespējams ar to sadarboties.
  • Sistēma mazāk ticami pārtrauks fonu pakalpojumu salīdzinājumā ar parastu fonu pakalpojumu vai plūsmu, jo tam ir augsts prioritātes līmenis.
  • Prasa īpašu atļauju FOREGROUND_SERVICE.
  • Izmanto mūzikas atskaņošanai, atrašanās vietas uzraudzībai, datu sinhronizācijai reāllaikā.

Dzīves cikls:

  1. Sākas ar startForegroundService().
  2. 5 sekunžu laikā jāizsauc startForeground(notificationId, notification), lai pārvietotu pakalpojumu uz fonu. Pretējā gadījumā sistēma var pārtraukt pakalpojumu un izsist ForegroundServiceDidNotStartInTimeException.
  3. Pārtrauc ar stopSelf() vai stopService() no cita komponenta vai obligāti lietotāja, caur paziņojumu. Pārtraucot, jāizsauc stopForeground(bool removeNotification) paziņojuma noņemšanai.

Piemērs:

// Atļaujas saņemšana
ActivityCompat.requestPermissions(
    this,
    arrayOf(Manifest.permission.FOREGROUND_SERVICE),
    REQUEST_CODE_FOREGROUND_SERVICE
)

// Pēc atļaujas saņemšanas vai ja tā jau ir
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)

Servisa iekšienē:

// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    val notification: Notification = createNotification() // Metode paziņojuma izveidei
    startForeground(NOTIFICATION_ID, notification)
    // Šeit sākas pakalpojuma uzdevuma izpilde
    return START_STICKY // Vai cits piemērots karogs
}

override fun onDestroy() {
    stopForeground(true) // Paziņojuma noņemšana
    // Resursu atbrīvošana
    super.onDestroy()
}