본문 바로가기

Kotlin/안드로이드 공부

AsyncTask

728x90

네트워크 작업 등을 하려면 백그라운드에서 작업하는 별도의 쓰레드가 필요하다.

보통은 inner class로 만든다 

 

AsyncTask<params, progress, result>를 상속받아서 만들어야 한다.

인자는 수행하는 데에 필요한 인자,

progress는 UI쓰레드로 결과를 보낼 것 (progress진행상태 업데이트를 위해)

result는 말그대로  수행 후 리턴되는 결과

 

ex)

class MyAsyncTask(context: MainActivity) : AsyncTask<URL, Unit, String>() {

 

onPreExecute() : 태스크 실행 전 set up하는 부분

doInBackGround() : 백그라운드에서 동작하는 main 부분

onProgressUpdate() : progress bar등등..

onPostExecute() : doInBackGround()에서 작업이 끝나면 return된 결과가 이곳의 인자로 들어간다.

onCancelled() : 태스크 취소되면 호출되는 부분

 

 

inner class로 만들기 때문에, (static)

* 백그라운드 태스크가 종료된 액티비티를 참고해 메모리 누수가 일어나지 않도록 !약한 참조!

val activityReference = WeakReference(context)

val activity = activityReference.get() // 이런식으로 activity가 필요할 때마다 get해서 얻어 쓴다.

 

'Kotlin > 안드로이드 공부' 카테고리의 다른 글

RecyclerView에 listener 달아주기  (0) 2020.05.17
RecyclerView 만들기  (0) 2020.05.17
첫방문 shared preference  (0) 2020.05.17
editText 한번에 지우는 버튼  (0) 2020.05.13
layoutInflater 레이아웃 객체화  (0) 2020.04.29