본문 바로가기

study/android

[android] AsyncTask

728x90

AsyncTask

AsyncTaskUI객체를 쉽게 조작할 수 있게 해주는 클래스이다.

다른 방법들로는 handler를 이용하거나 runOnUiThread를 사용하면 된다.

 

우선 AsyncTask는 단일 Task 단위로 진행을 하게 되며 멀티 스레딩을 하더라도 최대 3~4의 병렬만 가능하다. 또한 짧은 연산이라면 개발자가 사용하기에도 쉬워서 상관없겠지만 스레딩 외에도 성능이 중요하다면 사용하지 않는 것이 좋다.

 

execute()를 사용함으로써 AsyncTask를 백그라운드에서 실행시킬 수 있다. execute()를 실행시키고 나면 내부적으로 AsyncTask는 일련의 함수들을 실행하게 된다.

 

1. onPreExecute() : 백그라운드로 작업을 수행하기 전에 동작하는 함수로 보통 초기화

2. doInBackground(params) : 백그라운드에서 데이터 params를 이용해서 동작

3. onProgressUpdate(Progress) : 작업이 진행될 때 publishProgress( )가 호출될 때마다 UI를 객체를 보고

4-1. onPostExecute(Result) : 백그라운드 작업이 모두 마무리되고 나면 호출

4-2. onCancelled(Result) : cancel() 호출로 작업을 취소

 

위의 함수들에서 사용된 인자들은 모두 AsyncTask객체를 생성할 때 Generic type으로 넘겨주게 되어있다. AsyncTask <Params, Progress, Result>를 이용해서 사용할 값들을 인자로 넘겨주고 생성하게 된다.

params는 execute()를 호출할 때의 인자다. progress는 doInBackground작업을 수행할 때의 진행 단위가 되는 것이고 Result는 doInBackground의 return value라고 생각하면 된다.

 

각각의 함수들을 @Override를 통해서 AsyncTask를 상속받는 class 안에서 구현이 되어야 한다.

 

사용하는 코드들과 멀티 스레딩을 하기 위한 방법들은 참고했던 링크들에 많기 때문에 따로 작성은 하지 않는다.

 

 

<참고>

https://kim-hoya.tistory.com/44

https://youngest-programming.tistory.com/11

https://itmining.tistory.com/7

https://webnautes.tistory.com/1082

728x90

'study > android' 카테고리의 다른 글

[android] HttpURLConnection  (0) 2019.09.21
[android] Volley  (0) 2019.09.19
[android] LayoutInflater & Factory Method  (0) 2019.09.17
[android] ViewPager & PagerAdapter + LayoutInflater  (0) 2019.09.17
[android] drawable  (0) 2019.09.17