티스토리 뷰
반응형
AsyncTask는 비동기 처리를 위해 제공되는 Class입니다.
Thread와 Handler를 같이 사용하여 Ui와 데이터 처리를 했던 것을 AsyncTask로 편하게 처리할 수 있습니다.
AsyncTask의 구조로는 아래와 같습니다.
- onPreExecute - doInBackground 전에 실행됩니다. Main Thread에서 처리합니다.
- doInBackground - 일반 Thread에서 처리합니다.
- onProgressUpdate - doInBackground에서 publishProgress를 호출하면 Main Thread가 처리합니다.
- onPostExecute - doInBackground 후에 실행됩니다. Main Thread에서 처리합니다.
class AsyncTaskActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_async_task)
AsyncTaskClass().execute(10, 20)
}
inner class AsyncTaskClass : AsyncTask<Int, Long, String>() {
override fun onPreExecute() {
super.onPreExecute()
}
override fun doInBackground(vararg params: Int?): String {
Log.i("params", "${params[0]}, ${params[1]}")
while (true) {
Thread.sleep(1000)
publishProgress(System.currentTimeMillis())
}
return ""
}
override fun onProgressUpdate(vararg values: Long?) {
super.onProgressUpdate(*values)
asyncTask_textView.text = values[0].toString()
}
}
}
AsyncTaskClass는 AsyncTask <자료형 1, 자료형 2, 자료형 3>를 상속받고 있습니다.
자료형 1은 doInBackground의 파라미터 값, 자료형 3은 doInBackground의 반환 값, 자료형 2는 onProgressUpdate의 파라미터 값입니다.
doInBackground에서는 전달받은 값을 Log로 출력하게 하였습니다.
Log.i("params", "${params[0]}, ${params[1]}")
그리고 publishProgress를 통해 현재 시간의 초를 넘겨줬습니다.
onProgressUpdate에서는 Ui를 변경해주었습니다.
override fun onProgressUpdate(vararg values: Long?) {
super.onProgressUpdate(*values)
asyncTask_textView.text = values[0].toString()
}
publishProgress를 통해 받은 데이터를 적용하였습니다.
실행하면 아래와 같이 동작합니다.
반응형
'알려주는 이야기 > 안드로이드' 카테고리의 다른 글
안드로이드 다른 앱 실행하기 (5) | 2020.08.21 |
---|---|
안드로이드 Parcelable을 사용하여 데이터 전달하기 (0) | 2020.08.21 |
안드로이드 Handler (0) | 2020.08.20 |
안드로이드 Thread (0) | 2020.08.20 |
안드로이드 권한 (0) | 2020.08.19 |
댓글