AndroidStudio(WearOS)로 Interval Timer 만들기 : 타이머에 WakeLock 적용

LeeYulhee·2024년 4월 21일

👉 문제


  • Foreground Service를 적용해도 실행 중에 화면이 꺼지거나(절전 모드) 하면 타이머가 정상적으로 작동하지 않음



👉 문제 원인 및 해결 방안


  • 문제 : Foreground Service를 적용해도 실행 중에 화면이 꺼지거나(절전 모드) 하면 타이머가 정상적으로 작동하지 않음
    • 절전 모드로 전환되어서 어플이 중단되는 걸로 추측
    • ⇒ WakeLock을 적용해서 장치가 절전 모드로 전환되는 것을 방지



👉 WakeLock이란?


  • 앱이 장기 실행 작업을 처리해야 할 때, 장치가 자동으로 절전 모드로 전환되는 것을 막음
    • 예를 들면, 파일 다운로드, 위치 추적, 대량의 데이터 처리 등
  • 백그라운드에서 실행되는 서비스나 프로세스가 중단되지 않고 작업을 완료할 수 있도록 보장



👉 적용한 코드


@Override
public void onCreate() {
    super.onCreate();
    createNotificationChannel();
    acquireWakeLock();
}

private void acquireWakeLock() {
    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
            "TimerService::Lock");
    wakeLock.acquire();
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (wakeLock != null && wakeLock.isHeld()) {
        wakeLock.release();
        wakeLock = null;
    }
    if (countDownTimer != null) {
        countDownTimer.cancel();
        countDownTimer = null;
    }
}
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

0개의 댓글