동기 처리
어떠한 목적을 위해 수행해야하는 여러 기능들이 존재할 때, 이를 직렬적(순차적)으로 처리하는 방식이다. A라는 기능이 끝나면 B라는 기능을 수행하고, B의 처리가 끝나면 C기능을 수행한다. 개발자가 함수들을 선언하고 어떠한 처리도 하지 않고 실행하면 동기적으로 처리됨을 알 수 있다.
비동기 처리
동기 처리처럼 어떠한 기능이 끝나기를 기다리지 않고 병렬적으로 수행하는 즉, 멀티태스킹이 가능한 처리 방식이기 때문에 동기 처리보다 유용하다.
또한 메인 스레드에서 시간이 오래 걸리는 작업을 수행할 때 ANR이 발생할 수 있기 때문에 다른 스레드풀에 관리를 하게 해서 이를 방지할 수 있어 Main safe한 처리 방식이다.
ANR
입력 전달 타임아웃: 앱이 입력 이벤트(예: 키 누름 또는 화면 터치)에 5초 이내에 응답하지 않은 경우
서비스 실행: 앱에서 선언한 서비스가 몇 초 이내에 Service.onCreate() 및 Service.onStartCommand()/Service.onBind() 실행을 완료할 수 없는 경우
Service.startForeground()가 호출되지 않음: 앱이 Context.startForegroundService()를 사용하여 포그라운드에서 새 서비스를 시작했지만 서비스가 5초 내에 startForeground()를 호출하지 않은 경우
인텐트 브로드캐스트: BroadcastReceiver가 설정된 시간 내에 실행을 완료하지 못한 경우. 앱에 포그라운드 활동이 있는 경우 이 제한 시간은 5초입니다.
콜백 함수
코루틴 이전에는 비동기 처리에서 어떠한 기능의 수행 결과를 가지고 실행해야하는 다른 기능이 있다면 콜백함수를 사용하였다. 하지만 수행해야하는 콜백 함수가 늘어남에 따라 콜백헬이라도 부르는 복잡한 구조가 발생하기 때문에 안드로이드에서는 이를 개선하고자 코루틴이라는 기능을 제공하고 있다.
코루틴
비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 제공하는 기능입니다.