본문 바로가기

Android

단 5분, 단숨에 AsyncTask 완벽 정복!

반응형

안드로이드에서 간단한 크롤링 등 비동기 작업을 실행하기에는 AsyncTask만한 게 없습니다. 오늘은 AsyncTask를 구성하는 네 개의 메소드를 통해 AsyncTask를 완벽 이해해보도록 하겠습니다. 먼저 AsyncTask를 이루는 4개의 단계입니다.

AsyncTask의 4단계

  1. onPreExecute()는 비동기 작업이 실행되기 전, UI 쓰레드에서 실행됩니다. 이 단계는 프로그래스 바를 UI에 띄울 때처럼, 작업을 초기 설정할 때 사용됩니다.
  2. doInBackgroundonPreExecute()가 실행 완료된 직후, 백그라운드 쓰레드에서 실행됩니다. 이 단계는 오래 걸리는 백그라운드 작업을 수행할 때 사용합니다. 비동기 작업에 필요한 파라미터가 이 단계에 전달됩니다. 이 작업은 반드시 반환값이 있어야 하며, 반환값은 마지막 작업에 전달됩니다. 또한, 이 단계에서 진행 정보를 확인하기 위해 publishProgress를 사용할 수 있습니다. 진행 정보 값들은 onProgressUpdate 단계에서 UI 쓰레드로 publish 됩니다.
  3. onProgressUpdatepublicProgress 실행 이후 UI 쓰레드에서 실행되며, 실행 시점은 정해져 있지 않습니다. 이 메소드는 백그라운드 작업이 지속되고 있을 때, 예를 들어, 프로그래스 바 애니메이션이나 텍스트 로그를 보여주는 등 UI에 진행 상태를 표시하기 위해 사용됩니다.
  4. onPostExecute는 백그라운드 작업이 끝난 뒤 UI 쓰레드에서 실행됩니다. 백그라운드 작업의 반환값이 이 단계에 파라미터로 주어집니다.

Kotlin 클래스 작성

class YourClass: AsyncTask<Int?, Int, List<String>>() {

        override fun onPreExecute() {

            /* UI Thread: 프로그래스 바 등 준비 */

        }

    override fun doInBackground(vararg params: Int?): List<String> {

            /* Background Thread: 데이터 긁어오기 */

    }

        override fun onProgressUpdate(progress: Int) {

            /* UI Thread: 진행도 표시 */

        }

    override fun onPostExecute(result: List<String>) {

            /* UI Thread: 작업 수행 결과 표시 */

    }
}

AsyncTask 사용하기

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    var crawl = YourClass().execute()

        fab.setOnClickListener { view ->
        crawl.cancel()
    }
}

다음과 같이 execute()를 사용하여 실행하고 cancel()을 통해 진행 중인 작업을 취소할 수 있습니다.

반응형