【Android】코루틴

MYEONGEUN KWON·2023년 5월 1일
0

안드로이드

목록 보기
5/5
  • 동기 처리
    어떠한 목적을 위해 수행해야하는 여러 기능들이 존재할 때, 이를 직렬적(순차적)으로 처리하는 방식이다. A라는 기능이 끝나면 B라는 기능을 수행하고, B의 처리가 끝나면 C기능을 수행한다. 개발자가 함수들을 선언하고 어떠한 처리도 하지 않고 실행하면 동기적으로 처리됨을 알 수 있다.

  • 비동기 처리
    동기 처리처럼 어떠한 기능이 끝나기를 기다리지 않고 병렬적으로 수행하는 즉, 멀티태스킹이 가능한 처리 방식이기 때문에 동기 처리보다 유용하다.
    또한 메인 스레드에서 시간이 오래 걸리는 작업을 수행할 때 ANR이 발생할 수 있기 때문에 다른 스레드풀에 관리를 하게 해서 이를 방지할 수 있어 Main safe한 처리 방식이다.

  • ANR
    입력 전달 타임아웃: 앱이 입력 이벤트(예: 키 누름 또는 화면 터치)에 5초 이내에 응답하지 않은 경우
    서비스 실행: 앱에서 선언한 서비스가 몇 초 이내에 Service.onCreate() 및 Service.onStartCommand()/Service.onBind() 실행을 완료할 수 없는 경우
    Service.startForeground()가 호출되지 않음: 앱이 Context.startForegroundService()를 사용하여 포그라운드에서 새 서비스를 시작했지만 서비스가 5초 내에 startForeground()를 호출하지 않은 경우
    인텐트 브로드캐스트: BroadcastReceiver가 설정된 시간 내에 실행을 완료하지 못한 경우. 앱에 포그라운드 활동이 있는 경우 이 제한 시간은 5초입니다.

  • 콜백 함수
    코루틴 이전에는 비동기 처리에서 어떠한 기능의 수행 결과를 가지고 실행해야하는 다른 기능이 있다면 콜백함수를 사용하였다. 하지만 수행해야하는 콜백 함수가 늘어남에 따라 콜백헬이라도 부르는 복잡한 구조가 발생하기 때문에 안드로이드에서는 이를 개선하고자 코루틴이라는 기능을 제공하고 있다.

  • 코루틴
    비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 제공하는 기능입니다.

  1. 경량
    코루틴은 Suspend를 지원하는데, 기존 쓰레드 위에서 코루틴을 정지시키고 다음 코루틴를 실행한다. 이렇게 하면 단일 쓰레드에서 많은 작업을 수행할 수 있고 메모리 비용 측면에서 이득이다.
  2. 메모리 누수 감소
    코루틴은 CoroutineScope에서만 실행할 수 있기때문에 즉 라이프사이클 소유자의 라이프사이클이 destoryed 되면 코루틴도 종료됩니다. 메모리 누수 가 발생하지 않는다
    GlobalScope: 안드로이드 앱이 처음 시작부터 종료 할때까지 존재 Job을 컨트롤하기에 접합하지 않음에 주의 해야함
    LifecycleScope: activity, fragment
    ViewModelScope: onCleared 되면 코루틴 종료
  3. 디스패처는 코루틴을 적당한 스레드에 할당하고 관리한다
    Dispatchers.Default : 안드로이드 기본 스레드 풀을 사용한다. CPU를 많이 쓰는 데이터 정렬이나 복잡한 연산 같은 작업에 최적화 되어있다.
    Dispatchers.IO : 이미지 다운로드, 파일 입출력 등 네트워크, 디스크, DB작업에 최적화 되어있다.
    Dispatchers.Main : 안드로이드 기본 스레드에서 코루틴을 실행한다. UI와 상호작용에 최적화 되어있다.
    3.작업 취소 지원
    코루틴의 동작을 멈추게 하는 cancle method제공, 하위 코루틴까지 전부 취소해준다.
profile
Hello, World!

0개의 댓글