Wear OS 주기적으로 앱 깨우기 방법

Wear OS에서 주기적으로 자동으로 앱을 깨우려면 AlarmManager, WorkManager, 또는 Foreground Service와 같은 백그라운드 작업 스케줄링 기능을 활용해야 합니다.

  • AlarmManager: Android 표준 API로, 정해진 시간에 앱 또는 특정 작업을 실행할 수 있습니다. Wear OS에서도 사용 가능하며, Doze 및 배터리 최적화의 영향을 받으므로 정확한 주기성을 보장하려면 setExact(), setAndAllowWhileIdle() 등을 사용해야 합니다.
  • WorkManager: 주기적인 작업 및 백그라운드 처리를 표준화하는 공식 라이브러리입니다. 네트워크 등 작업 조건을 지정할 수 있습니다. 단, WorkManager의 최소 반복 인터벌은 15분입니다.
  • Foreground Service: 실시간 데이터 처리가 필요한 경우 Foreground 서비스로 앱을 계속 활성화할 수 있지만, 사용자에게 Notification을 항상 표시해야 하므로 배터리 소모가 큽니다.
  • JobScheduler: API 21 이상에서 사용 가능하며, 시스템이 최적의 시점에 작업을 실행하도록 예약합니다.
  • 스케줄러 대신 화면을 항상 켜두기: Ongoing Activity나 FLAG_KEEP_SCREEN_ON 플래그로 앱이 화면에 계속 표시되게 할 수도 있지만, 배터리 소모가 심합니다.

실제 동작 시 고려사항

  • Wear OS의 절전/앰비언트(대기) 모드에서는 주기 실행이 지연될 수 있습니다. 이 환경에서는 시스템이 배터리 절약을 우선시하므로, 작업 실행 시간이 정확하지 않을 수 있습니다.
  • 주기적인 알람이나 작업 예약이 OS에 의해 늦춰질 수 있으니 “setAndAllowWhileIdle()” 등 절전 모드에서도 동작하는 옵션을 적용해야 합니다.
  • 너무 잦은 깨우기는 배터리 소모가 심해 사용자 경험이 저하될 수 있습니다.

예시 코드 (AlarmManager)

kotlin

val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(context, YourBroadcastReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)

alarmManager.setRepeating(
    AlarmManager.RTC_WAKEUP,
    System.currentTimeMillis(),
    10 * 60 * 1000, // 10분마다
    pendingIntent
)

절전 모드에서도 동작하게 하려면 AlarmManager의 setAndAllowWhileIdle() 사용을 고려해야 합니다.

참고 사항

  • Wear OS 6 이상에선 Always-on/앰비언트 모드에서의 동작 방식이 다르므로, 최신 정책 공식문서를 참고해야 합니다.
  • 지나치게 짧은 주기로는 백그라운드 작업이 제한될 수 있으니, 15분 이상 간격을 권장합니다.
  • 상태에 따라 Foreground Service와 백그라운드 스케줄러를 병행하는 방안도 있습니다.

이처럼 Wear OS에서는 AlarmManager, WorkManager, JobScheduler, Foreground Service 등을 이용하여 주기적으로 앱을 자동으로 깨울 수 있으나, 시스템의 절전 정책을 반드시 고려해야 합니다.

Back to top