ANDROID:
Поскольку Android фокусируется на эффективном способе использования батареи, система лишает ресурсы приложения, когда приложение находится в фоновом режиме (зависит). Для работы с фоновыми задачами лучше использовать менеджер работ.
Взгляните https://developer.android.com/topic/libraries/architecture/workmanager/basics.html
Пример кода
class GetMessages(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
getAndSaveMessages()
return Result.success()
}
private fun getAndSaveMessages() {
// get messages here
}
}
Поместите этот код в класс Singleton для доступа к нему из любого места, как JobManager
object JobManager{
private fun syncMessages(){
val loadMessages = PeriodicWorkRequestBuilder<GetMessages>(5, TimeUnit.MINUTES)
// Add tag to cancel the thread any time
loadMessages.addTag("MESSAGES")
val myConstraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
// Many other constraints are available, see the
// Constraints.Builder reference
.build()
// Add constraints
loadMessages.setConstraints(myConstraints)
WorkManager.getInstance().enqueue(loadMessages.buld())
}
}
Теперь вы можете использовать JobManager.syncMessages()
из любого места