Как ускорить частоту вызова функции WorkManager при запущенном Activity?
Созданным в onCreate экземпляром WorkManager
val workRequest = PeriodicWorkRequestBuilder<FetchJsonWorker>(repeatInterval = 15, TimeUnit.MINUTES)
.build()
WorkManager.getInstance(this).enqueueUniquePeriodicWork("DataFetchWork",
ExistingPeriodicWorkPolicy.UPDATE, workRequest)
я в фоне периодически раз в 15 минут вызываю функцию, которая использует в классе в отдельном kt файле экземпляры Retrofit, Notification, еще и БД ROOM позже добавлю
class FetchJsonWorker(
context: Context,
workerParams: WorkerParameters
) : CoroutineWorker(context, workerParams) {
override suspend fun doWork(): Result {
return try {
val response = RetrofitInstance.api.get("anynetworkfile.txt")
...
showNotification("Новое сообщение", response)
}
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
private fun showNotification(title: String, content: String, t: Long) {
val channelId = "fetch_json_channel"
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channel = NotificationChannel(...)
notificationManager.createNotificationChannel(channel)
val notification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle(title)
.setContentText(content)
.setSmallIcon(android.R.drawable.ic_dialog_info)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.build()
notificationManager.notify(id, notification)
}
}
Задача - при открытом приложении вызывать эту же функцию doWork() раз не в 15 минут, а, например, раз в 15 секунд. Отловить запуск и завершение MainActivity для новой корутины в OnCreate с частым циклом опроса не проблема, но как она должна вызывать fun doWork() в классе FetchJsonWorker? Или можно как-то ускорять WorkManager? Или придется создавать еще одни экземпляры Retrofit, Notification и ROOM в контексте MainActivity? Я пока не очень разобрался с контекстами и рисками утечек памяти, прошу помочь примером. Спасибо.