v0.3.2: HotDealApplication.kt

This commit is contained in:
sanjeok77 committed 2026-08-24 22:34:20 +00:00
1 parent cd866600e6
commit 47de6bad98
1 file changed
+37 -1
@@ -1,9 +1,17 @@
package com.hotdeal.alarm package com.hotdeal.alarm
import android.app.Application import android.app.Application
import android.util.Log
import androidx.hilt.work.HiltWorkerFactory import androidx.hilt.work.HiltWorkerFactory
import androidx.work.Configuration import androidx.work.Configuration
import com.hotdeal.alarm.data.local.preferences.AppSettings
import com.hotdeal.alarm.worker.WorkerScheduler
import dagger.hilt.android.HiltAndroidApp import dagger.hilt.android.HiltAndroidApp
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
@HiltAndroidApp @HiltAndroidApp
@@ -12,13 +20,41 @@ class HotDealApplication : Application(), Configuration.Provider {
@Inject @Inject
lateinit var workerFactory: HiltWorkerFactory lateinit var workerFactory: HiltWorkerFactory
@Inject
lateinit var workerScheduler: WorkerScheduler
@Inject
lateinit var appSettings: AppSettings
private val applicationScope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
override val workManagerConfiguration: Configuration override val workManagerConfiguration: Configuration
get() = Configuration.Builder() get() = Configuration.Builder()
.setWorkerFactory(workerFactory) .setWorkerFactory(workerFactory)
.setMinimumLoggingLevel(Log.DEBUG)
.build() .build()
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
// Application initialization // 앱 시작 시 백그라운드 폴링 즉시 등록/갱신
ensurePollingScheduled()
}
/**
* 앱이 시작될 때마다 백그라운드 폴링이 등록되어 있는지 확인하고,
* 없으면 즉시 등록합니다. UPDATE 정책으로 항상 최신 Worker가 동작합니다.
*/
private fun ensurePollingScheduled() {
applicationScope.launch {
try {
val interval = appSettings.pollingInterval.first()
Log.d("HotDealApp", "백그라운드 폴링 등록/갱신: ${interval}분 간격")
workerScheduler.schedulePeriodicPolling(interval.toLong())
} catch (e: Exception) {
Log.e("HotDealApp", "폴링 스케줄 등록 실패: ${e.message}", e)
// 기본값으로 폴백
workerScheduler.schedulePeriodicPolling(WorkerScheduler.DEFAULT_INTERVAL_MINUTES)
}
}
} }
} }