[Android] AsyncTask란?

혜령·2021년 12월 8일
0

Android 공부하기

목록 보기
2/8


AsyncTask는 API 30부터 사용할 수 없고, 코루틴 사용이 권장됩니다. 하지만 기존의 방식을 알아보기 위해서 AsyncTask에 대해서 알아보고자 합니다.

AsyncTask 클래스는 이름에서부터 알 수 있듯이 비동기 작업을 위해 사용됩니다. UI 스레드에서 수행한다면 UI 스레드가 차단될 수 있는 작업을 비동기적으로 수행할 수 있습니다.

예를 들면, UI 스레드에서 전달 받은 데이터를 가지고 원하는 작업을 비동기적으로 실행하고, 작업의 결과를 받아와서 UI에 갱신시키고 싶은 경우에 사용됩니다.

Thread, Runnable, Handler를 사용해서 처리하는 것보다 간단하게 적용할 수 있습니다.

주의할 점
앱은 생성한 모든 AsyncTask를 단일 스레드로 푸시합니다. 이 작업들은 직렬적으로 실행되기 때문에 긴 작업이 뒤의 작업을 차단할 수 있습니다. 지속 시간이 5ms보다 짧은 항목에만 사용하는 것이 좋습니다.

AsyncTask class

  • 추상 클래스 AsyncTask는 추상 클래스입니다. 따라서 원하는 작업을 처리하는 클래스는 AsynTask 클래스를 상속하면 됩니다.
  • 제네릭 타입 : AsyncTask<Params, Progress, Result> AsyncTask를 통해서 하고자 하는 작업이 다르고, 관리하는 데이터도 다릅니다. 따라서 AsyncTask는 제네릭(Generics)로 선언되어, 상속 할 때 결정할 수 있도록 되어 있습니다.
    • Params: 실행에 필요한 전달 인자
    • Progress: 작업의 진행 정보
    • Result: 작업이 완료된 후 결과 값

제네릭(generic)이란?
클래스를 정의할 때, 구체적인 타입(type)을 적지 않고 변수 형태로 적어 놓는 것이다.

  • 가변 인자 : (Params ...), (Progress ...) 작업마다 전달해야 하는 데이터의 개수가 다를 수 있습니다. 따라서 가변 인자를 전달하도록 하여 원하는 두 개 이상의 값을 전달할 수 있도록 합니다.
  • 메서드
    • onPreExecute: 작업 실행 전에 UI 스레드에 의해서 호출됩니다. 작업에 필요한 초기화 작업을 수행합니다.
    • doInBackground: onPreExecute가 호출된 뒤에, 백그라운드 스레드에서 바로 호출됩니다. 실행할 작업을 여기서 수행하면 됩니다. AsyncTask의Params가 이 메서드의 전달 인자 타입으로 매핑되고, Result가 return 타입으로 매핑됩니다. doInBackground() 실행 중 상태 업데이트를 원하는 경우, publishProgress 메서드를 호출하여 UI 스레드에서 onProgressUpdate가 호출되게 만들 수 있습니다.
    • onProgressUpdate: 진행 상황을 UI에 보여주기 위한 메서드로, doInBackground에서 publishProgress를 호출하면 UI 스레드에서 호출됩니다.
    • onPostExecute: 백그라운드 작업이 완료되면 UI 스레드에서 호출되는 메서드 입니다. 파라미터 Result에 doInBackground의 return값이 들어옵니다.

reference
(https://recipes4dev.tistory.com/174)[안드로이드 AsyncTask]

profile
안녕하세요

0개의 댓글