ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WorkManager(1)
    Android 2021. 10. 4. 20:35

    WorkManager는 앱이 종료되거나 기기가 다시 시작되더라도 실행될 것으로 예상되는 신뢰할 수 있는 비동기 작업을 쉽게 예약할 수 있게 해주는 API이다.

    WorkManager API는 FirebaseJobDispatcher, GcmNetworkManager, JobScheduler를 비롯한 모든 이전 Android 백그라운드 예약 API를 대체할 수 있는 적합하고 권장되는 API이다.  WorkManager는 API 수준 14와 역호환되는 일관된 최신 API에 이전 기능을 통합하면서 배터리 수명도 개선한다.

     

    내부적으로 WorkManager에서는 다음 기준에 따라 기본 작업 전달 서비스를 사용한다.

     

    참고:  앱에서 Android 10(API 수준 29) 이상을 타겟팅하는 경우 FirebaseJobDispatcher 및 GcmNetworkManager API 호출이 Android Marshmallow(6.0) 이상을 실행하는 기기에서 더 이상 작동하지 않는다.

    WorkManager의 이점

    • 작업 제약조건 지원

    네트워크 상태, 저장공간, 충전 상태와 같은 제약 조건 지원

    (예 :  기기가 Wi-Fi에 연결되어 있거나, 저장공간이 충분한 경우에만 작업이 실행되도록 정의)

    • 강력한 예약 관리

    WorkManager를 사용하면 한 번 또는 반복적으로 실행할 작업을 예약할 수 있다. 작업에 태그 및 이름을 지정하여 고유 작업 및 대체 가능한 작업을 예약하고 작업 그룹을 모니터링하거나 취소할 수 있다. 예약된 작업은 내부적으로 관리되는 SQLite 데이터베이스에 저장되며 WorkManager에서 기기를 재부팅해도 작업이 유지되고 다시 예약되도록 보장하며 잠자기 모드와 같은 절전 기능과 권장사항을 준수하므로 배터리를 걱정할 필요가 없다.

    • 유연한 재시도 정책
    • 작업 체이닝

    동시 작업 실행을 포함한 복잡한 작업 요청 체이닝 

    한 작업 요청의 출력이 다음 작업 요청의 입력으로 사용됨

     

    • 내장 스레딩 상호 운용성

    WorkManager에서는 RxJava  코루틴과 원활하게 통합되며 자체 비동기 API를 연결할 수 있는 유연성을 제공한다.

    • Google Play 서비스 사용 여부와 관계없이 작동함
    • 시스템 상태 권장사항 준수
    • UI에 작업 요청 상태를 쉽게 표시하는 LiveData 지원

    백그라운드 작업의 카테고리

     

    백그라운드 작업에 가장 적합한 카테고리를 결정하는 데 도움이 되는 결정 트리

    즉시 실행해야 하는 작업(Immediate tasks)

    사용자가 특정 범위를 벗어나거나 상호작용을 완료할 때 종료해야 하는 작업에는 Kotlin은 코루틴, Java의 경우 Android의 스레딩에서 권장 옵션을 확인하자. 사용자가 애플리케이션을 백그라운드로 전환하거나 기기를 다시 시작하더라도 즉시 실행해야 하며 지속적인 처리가 필요한 작업의 경우 WorkManager와 장기 실행 작업 지원 기능을 사용하는 것이 좋다.

     

    지연된 작업(Deferred tasks)

    지연된 작업에 추천하는 해결 방법은 WorkManager이다. WorkManager를 사용하면 앱이 종료되거나 기기가 다시 시작되더라도 지연될 수 있는 비동기 작업을 쉽게 예약할 수 있다.

     

    정시에 실행해야 하는 작업(Exact tasks)

    정확한 시점에 실행해야 하는 작업에는 AlarmManager를 사용할 수 있다.

    WorkManager 사용하기

    WorkManager는 앱 프로세스가 사라지더라도 안전하게 종료할 수 있는 진행 중인 백그라운드 작업 또는 즉시 실행해야 하는 작업을 대상으로 하지 않고 사용자가 화면을 벗어나거나, 앱이 종료되거나, 기기가 다시 시작되더라도 안정적으로 실행되어야 하는 작업을 대상으로 설계되었다. 예:

    • 백엔드 서비스에 로그 또는 분석을 전송
    • 주기적으로 애플리케이션 데이터를 서버와 동기화

     

    즉 WorkManager는 앱이 종료되더라도 시스템에서 해당 작업을 실행하도록 보장해야 하는 작업을 위한 것이다. 즉시 실행해야 하지만 오래 실행되는 작업의 경우 작업이 foreground에 있을 때 실행되는지 확인해야 하는 경우가 많은데 실행을 foreground로 제한하거나(이 경우 작업은 더 이상 실제 background 작업이 아님) Foreground Service를 사용한다.

     

    WorkManager는 더 복잡한 시나리오에서 백그라운드 작업을 트리거해야 하는 경우 다른 API와 페어링할 수 있고 페어링해야 한다. 

    • 서버가 작업을 트리거하면 WorkManager가 Firebase 클라우드 메시징과 페어링될 수 있다.
    • Broadcast receiver를 사용하여 Broadcast를 수신한 다음 장기 실행 작업을 트리거해야 하는 경우 WorkManager를 사용할 수 있다. WorkManager는 일반적으로 Broadcast로 제공되는 많은 공통 제약 조건에 대한 지원을 제공한다. 이러한 경우에는 Broadcast receiver를 등록할 필요가 없다.

     

    Reference

    'Android' 카테고리의 다른 글

    Managing Threads and Custom Services  (0) 2022.02.04
    data binding : providing values in Include layout  (0) 2021.11.05
    Fragment  (0) 2021.08.16
    Replace findViewById with View Binding  (0) 2021.08.06
    ANR(Application Not Responding)  (0) 2021.07.19
Designed by Tistory.