Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor : 걸음수 로직 개선 #66

Merged
merged 2 commits into from
Jun 23, 2024
Merged

refactor : 걸음수 로직 개선 #66

merged 2 commits into from
Jun 23, 2024

Conversation

jowunnal
Copy link
Contributor

@jowunnal jowunnal commented Jun 20, 2024

📌 Issue Number

📘 작업 유형

  • 신규 기능 추가
  • 버그 수정
  • 리팩토링
  • 디자인 수정

📙 작업 내역

구현 내용 및 작업 내역을 기재합니다.

  • 포그라운드 서비스에서 걸음수를 실시간으로 수집하고, 헬스커넥트에 저장하여 제공되는 api 를 활용해 통계화된 데이터를 사용할 수 있는 기능 구현
    • 걸음수를 수집하는 포그라운드 서비스는 시스템에 의해 언제든지 종료후 재실행 될 수 있으므로, 디스크에 걸음수를 저장하거나 onStartCommand() 의 intent 매개변수가 null 인 경우 시스템에 의해 종료됬다가 재실행 된것 이므로 이럴 때 대응 전략 구현
    • 걸음수를 감지하는 합계 센서는 디바이스가 재부팅될 때 0으로 초기화 된 후 걸음이 감지될 때 마다 1 씩 무한 증가 되므로, 이값을 토대로 오늘의 걸음수를 계산하는 로직 구현
    • 걸음이 감지될 때 마다 헬스커넥트에 1걸음씩 저장하면 데이터의 수가 과하게 많아지고, 잦은 I/O 작업과 통계화하여 가져오는데 성능 문제가 발생할 수 있기 때문에 타이머를 구현하여 걸음이 발생하는 일정 시간동안 누적한 뒤 1분 동안 걸음이 발생하지 않게 되면 걸음수를 헬스커넥트로 저장하도록 구현
    • 사용자가 포그라운드 서비스를 종료(버튼 제공)하거나, 휴대폰 재부팅 과 같은 이유로 1분 타이머가 완료되기전에 서비스가 종료 될 수 있기 때문에 최초실행시(서비스의 실행 및 생성이 재부팅 혹은 시스템에 의해 재실행 되는 원인이 아닌 경우) 헬스커넥트의 걸음수와 실시간으로 디스크에 저장하는 오늘의 걸음수를 비교하여 차이만큼 헬스커넥트에 저장하도록 구현. 단, 두가지의 케이스가 존재하여 별도 처리
      1. 서비스 종료 이후 다시 실행하는 시점이 당일인 경우
      2. 하루 이상 차이나거나, 앱 최초 설치 인경우
  • 그외 복잡한 엣지케이스들 테스트 추가
  • AGP 8.1 -> 8.3
  • dagger 2.48 -> 2.49
  • hilt 1.1.0-alpha01 -> 1.2.0

📋 체크리스트

  • PR 제목에 Prefix(Feat, Refactor, Fix...etc) 와 작업 번호 및 내용을 요약 기재
  • 사용되지 않은 import 문 제거 & code reformatting 수행
  • PR과 관련있는 코드만 추가
  • 코드 개선 및 검토 완료

📝 PR 특이 사항

PR을 볼 때 주의깊게 봐야하거나 말하고 싶은 점으로 없을 경우 제거 이후 PR을 생성합니다.

  • 알고리즘은 다이어그램과 텍스트파일로 자세히 설명해뒀고
  • 몇가지 버전 수정이 있엇어



@jowunnal jowunnal self-assigned this Jun 20, 2024
@jowunnal jowunnal requested a review from kyungil9 June 20, 2024 13:41
@jowunnal jowunnal added gradle grade, build 설정 관련 작업 refactor 코드, 성능 개선(리펙토링) 관련 작업 documentation 문서 관련 작업 labels Jun 20, 2024
kyungil9
kyungil9 previously approved these changes Jun 21, 2024
- 서비스가 재부팅 혹은 시스템에 의해 재실행 된게 아닐 때, 헬스커넥트의 걸음수를 참조하지 않고 디스크에 저장된 오늘의 걸음수를 missedTodayStepAfterReboot 로 참조하도록 변경
- 또한, 이시점에서 헬스커넥트에 걸음수를 저장하는 타이머가 완료되기 전에 서비스가 종료되서 누락될 수 있으므로 (타이머 완료 전에 휴대폰을 재부팅한다던지) 디스크에 저장된 걸음수와 비교하여 차이만큼 헬스커넥트에 저장하도록 변경
- 기존에 시스템에 의해 재실행 되었을 경우 플래그에 따라 참이면, last 에 헬스커넥트의 걸음수를 할당하도록 했는데 재부팅을 하거나 재부팅 또는 시스템에 의해 재실행되는게 아닐 때도 마찬가지로 초기시점에 반드시 헬스커넥트에 저장된 걸음수를 last 에 할당하도록 변경
- 그외 복잡한 엣지케이스들 테스트 추가
@jowunnal jowunnal merged commit 137b1e6 into develop Jun 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation 문서 관련 작업 gradle grade, build 설정 관련 작업 refactor 코드, 성능 개선(리펙토링) 관련 작업
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

2 participants