Flutter document를 살펴보는 중에, happypath 라는 프로젝트를 발견했다. 해당 링크를 타고 가면 볼 수 있는 문서에서 보듯 다양한 유형의 기능 추가를 위한 가이드 정도로 생각할 수 있다.
그 중 backgroundservice 항목에서 추천하는 workmanager 패키지에 대해 살펴보았다.
현재 우리의 프로젝트에서 사용하고 있듯, background에서 실행되어야 로직을 callbackDispatcher 메서드에 구현 후, main에서 initialize 해주고 있다. 그러면 어떻게 background에서 로직이 실행되는지 알아보자.
패키지 초기화 후 실행되는 Workmanager().registerOneOffTask 메서드는, 일회성 백그라운드 로직 실행 명령이다.
uniqueName은 backgroundservice가 단 1개만 실행되어야 하는 조건을 만족하기 위한 uniqueName이다.
taskName은 Workmanager().excuteTask의 Future<bool> Function(String, Map<String, dynamic>?) 형식을 가지는 parameter에서 String에 해당하는 부분이다. 다시 말해, (task, inputData) 중 task에 해당하는 부분이다.
tag는 tag이다. ExistingWorkPolicy는 service항목의 충돌시 해결 정책, duration은 duration. constraints는 같이 읽어봅시다. backoffPolicy는 모종의 사유로 어떠한 동작 또는 실행의 실패가 일어났을 경우 재시도하는 과정(정확하게는 재시도 하는 과정 사이의 간격)에 대한 정책이다. (참고자료 : https://jungseob86.tistory.com/12)
OutOfQuotaPolicy는 '긴급 작업에 대한 할당량 초과 동작을 결정하는 데 도움이 되는 정책의 열거입니다.' 라고 나와있는데 해당 부분에 대한 구체적인 동작 정의는 실제 확인해보아야 알 수 있을 것 같다.
inputData는 map 형태의 input data 이다.
이번엔 주기적인 로직 실행을 위한 method 이다. frequency를 parameter로 가진다. 다만 해당 주기는 15분 이하의 경우에는 최소 15분으로 맞춰진다고 한다. (https://developer.android.com/topic/libraries/architecture/workmanager/how-to/define-work?hl=ko) 또한 iOS에서는 일회성 backgroundservice 로직 실행을 지원한다.
example 앱을 실행하여 구체적인 실행 과정을 디버깅 해보도록 하자.
'Weekly Flutter' 카테고리의 다른 글
Generic을 파다가 variance를 파다가 리스코프의 법칙을 파다가.. (0) | 2023.07.06 |
---|---|
조건에 따라 위젯을 보여주거나 숨기는 좋은 방법을 찾아서 (Opacity, Visibility, Offstage ) (0) | 2023.07.01 |
[Flog Favorite] go_router 패키지 (0) | 2023.03.22 |
다트의 인스턴스 복사 (0) | 2023.03.15 |
[Platform integration] 2. Event Channel 사용방법 (0) | 2023.03.08 |