Handling Background Tasks in Android App Development: A Comprehensive Guide
https://blog.stackademic.com/handling-background-tasks-in-android-app-development-a-comprehensive-guide-1cb3a9e323ca
백그라운드 작업을 백그라운드에서 하지 않으면 메인 스레드가 블락되어 유저 경험에 안좋은 영향을 줄 수 있다.
백그라운드 작업을 위한 보편적인 방법들
- AsyncTask: 메모리 릭이나 복잡성, lifecycle 이슈 등으로 deprecated되었다.
- Threads and Handlers: low-level 방법이며 많은 기능이 있지만 UI 스레드와 함께 사용하면 에러가 발생 가능성이 있기 때문에 복잡하다.
- Services: 최근에는 background service의 제한으로 보통 foreground service가 쓰이며, 미디어 플레이어 등 사용자에게 진행 상황을 보여주는 경우 사용된다.
- JobScheduler: 단말 컨디션이나 배터리 상태, 네트워크 연결 상태 등을 기반으로 작업을 수행한다.
- WorkManager: 미뤄진 작업이나 보장된 작업에 추천된다. 앱이 종료되거나 단말이 재시작 되어도 실행되어야 하는 작업을 지원한다. JobScheduler 위에 구현되어 하위 호환성이 보장된다.
백그라운드 작업을 위한 best practice
- 보장된 백그라운드 작업을 위해 WorkManager을 사용
- 간결함과 성능을 위해 코루틴 사용
- Activity나 Fragment 등 라이프사이클 관리
- Constraint를 적합하게 사용
- 유저에게 보여야 하는 작업을 위해 Foreground Service 사용
- 리소스 사용 최적화
- 올바른 에러 처리