v0.3.2: HotDealApplication.kt
This commit is contained in:
1 parent
cd866600e6
commit
47de6bad98
1 file changed
+37
-1
@@ -1,9 +1,17 @@
|
||||
package com.hotdeal.alarm
|
||||
|
||||
import android.app.Application
|
||||
import android.util.Log
|
||||
import androidx.hilt.work.HiltWorkerFactory
|
||||
import androidx.work.Configuration
|
||||
import com.hotdeal.alarm.data.local.preferences.AppSettings
|
||||
import com.hotdeal.alarm.worker.WorkerScheduler
|
||||
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
|
||||
|
||||
@HiltAndroidApp
|
||||
@@ -12,13 +20,41 @@ class HotDealApplication : Application(), Configuration.Provider {
|
||||
@Inject
|
||||
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
|
||||
get() = Configuration.Builder()
|
||||
.setWorkerFactory(workerFactory)
|
||||
.setMinimumLoggingLevel(Log.DEBUG)
|
||||
.build()
|
||||
|
||||
override fun 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user