AsyncTask를 상속한다.
onPreExcute 쓰레드 시작 전 작업
doInBackground 쓰레드가 처리 할 작업
onPregressUpdate 중간중간 Main Thread로 돌아옴
onPostExcute 작업을 마친 후 Main Thread로 돌아옴
Async의 장점
Main Thread(UI Thread)가 sub Thread의 작업을 기다리며 대기하지 않아도 된다.
특히 네트워크를 사용하는 작업에 효율적이다.
Async의 단점
재사용이 불가능하다. (cancel이 호출된 이후로 다시 사용이 불가.)
Async 객체를 생성한 Activity가 종료되도 자동으로 취소되지 않는다.
AsyncTask는 하나만 실행 가능하다. 여러 인스턴스를 생성해도 하나가 실행이 완료되야 다음 동작이 실행된다. (다수 쓰레스로 병렬 수행이 불가하다)
class BackgroundAsyncTask( val progressbar: ProgressBar ,val progresstext: TextView ): AsyncTask<Int,Int,Int>(){ // params - doInBackground 에서 사용할 타입 // progress - onProgressUpdate 에서 사용할 타입 // result - onPostExecute 에서 사용할 타입 var percent: Int = 0 override fun onPreExecute() { percent = 0 progressbar.setProgress(percent) } override fun doInBackground(vararg params: Int?): Int { while(isCancelled() == false) { percent++ if(percent>100) break else publishProgress(percent) try { Thread.sleep(100) } catch (e : Exception) { e.printStackTrace() } } return percent } override fun onProgressUpdate(vararg values: Int?) { progressbar.setProgress(values[0] ?: 0) progresstext.setText("Percent : "+values[0]) } override fun onPostExecute(result: Int?) { progresstext.setText("Completed!") } override fun onCancelled() { progressbar.setProgress(0) progresstext.setText("Task canceled") } }
'Android > Android기본' 카테고리의 다른 글
ListView (0) | 2021.11.24 |
---|---|
RecyclerView (0) | 2021.11.24 |
TabLayout, Pager (0) | 2021.11.24 |
SharedPreference (0) | 2021.11.24 |
Realm (0) | 2021.11.24 |
Uploaded by Notion2Tistory v1.1.0