반응형
안드로이드에서 간단한 크롤링 등 비동기 작업을 실행하기에는 AsyncTask만한 게 없습니다. 오늘은 AsyncTask를 구성하는 네 개의 메소드를 통해 AsyncTask를 완벽 이해해보도록 하겠습니다. 먼저 AsyncTask를 이루는 4개의 단계입니다.
AsyncTask의 4단계
onPreExecute()
는 비동기 작업이 실행되기 전, UI 쓰레드에서 실행됩니다. 이 단계는 프로그래스 바를 UI에 띄울 때처럼, 작업을 초기 설정할 때 사용됩니다.doInBackground
는onPreExecute()
가 실행 완료된 직후, 백그라운드 쓰레드에서 실행됩니다. 이 단계는 오래 걸리는 백그라운드 작업을 수행할 때 사용합니다. 비동기 작업에 필요한 파라미터가 이 단계에 전달됩니다. 이 작업은 반드시 반환값이 있어야 하며, 반환값은 마지막 작업에 전달됩니다. 또한, 이 단계에서 진행 정보를 확인하기 위해publishProgress
를 사용할 수 있습니다. 진행 정보 값들은onProgressUpdate
단계에서 UI 쓰레드로 publish 됩니다.onProgressUpdate
는publicProgress
실행 이후 UI 쓰레드에서 실행되며, 실행 시점은 정해져 있지 않습니다. 이 메소드는 백그라운드 작업이 지속되고 있을 때, 예를 들어, 프로그래스 바 애니메이션이나 텍스트 로그를 보여주는 등 UI에 진행 상태를 표시하기 위해 사용됩니다.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()
을 통해 진행 중인 작업을 취소할 수 있습니다.
반응형
'Android' 카테고리의 다른 글
Extension fun, 코틀린 기초 문법 (2) - Koans 풀이 (0) | 2020.01.27 |
---|---|
null? 코틀린 기초 문법 (1) - ? ?: !! (0) | 2020.01.24 |
doAsync, AsyncTask, Coroutines 안드로이드 비동기 정답은?! (0) | 2020.01.22 |
안드로이드, 코틀린?! Adapter/?? 이게 다 뭐야!! 고통스러워!!!!! (1) | 2020.01.19 |
앱 개발로 꾸준히 돈 버는 부수익 만들기 (0) | 2020.01.16 |