AsyncTask
AsyncTask는 UI객체를 쉽게 조작할 수 있게 해주는 클래스이다.
다른 방법들로는 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
'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 |