AsyncTask

황제낙엽 2019.03.25 00:03 조회 수 : 55

sitelink1 https://kwony91.tistory.com/entry/AsyncTask?category=851285 
sitelink2  
sitelink3  

AsyncTask는 파일 다운로드 완료후 사용자에게 완료됐다는 Toast 메시지를 보내는 유스케이스처럼 특정 백그라운드 작업이 종료되고 사용자에게 화면으로 알림을 전달해야하는 경우 유용한 클래스다. 코드가 직관적이고 응용하기 쉬워 자주 사용되는 라이브러리지만 몇초 이내에 종료될 수 있는 작업인 경우에만 사용이 가능하며 그것보다 긴 작업은 다른 클래스를 사용해야 한다.

 

안드로이드 공식문서의 예제 코드를 통해 사용 방법을 익혀보자.

 

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {

     protected void onPreExecute(Integer... progress) {

         /* do nothing */

     }

     protected Long doInBackground(URL... urls) {

         int count = urls.length;

         long totalSize = 0;

         for (int i = 0; i < count; i++) {

             totalSize += Downloader.downloadFile(urls[i]);

             publishProgress((int) ((i / (float) count) * 100));

             // Escape early if cancel() is called

             if (isCancelled()) break;

         }

         return totalSize;

     }

     protected void onProgressUpdate(Integer... progress) {

         setProgressPercent(progress[0]);

     }

     protected void onPostExecute(Long result) {

         showDialog("Downloaded " + result + " bytes");

     }

 }

 

1. 상속 함수

 

클래스의 작업은 진행 순으로 크게 네가지로 구분된다.

 

protected void onPreExecute

 

이름에서 직감할 수 있듯이 AsyncTask 실행시 가장 먼저 불리는 함수다. 주로 여기에 백그라운드를 시작하기 전에 초기화해야하는 변수나 객체를 선언하는 용도로 사용한다.

 

protected Long doInBackground

 

백그라운드 작업이 실행되는 함수다. 예제 코드에서 확인 할 수 있듯이 여러 개의 인자를 전달받을 수 있으며 작업이 종료되면 특정 자료형의 결과 값을 리턴한다. 파라미터와 결과의 타입을 설정하는 방법은 다음 챕터에서 설명할 예정이다.

 

protected void onPostExecute

 

doInBackground  함수가 종료된 후 실행되는 함수다. doInBackground 함수의 결과값을 파라미터로 받으며 주로 예제 코드처럼 실행 완료메시지를 사용자에게 알림하는데 사용한다.

 

protected void onProgressUpdate

 

doInBackground 내에서 publishProgress 함수를 호출 할 때 불리는 함수이며 주로 작업의 진행 상황을 표시하는데 사용된다. 예제 코드에서는 다운로드 완료를 퍼센테이지로 전달했다.  

 

 

2. AsyncTask 인자

 

예제 코드의 DownloadFilesTask 클래스는 AsyncTask<URL, Integer, Long>을 상속하는데 여기서 부모클래스의 template 인자의 타입은 순서에 따라서 앞서 설명한 네가지 작업의 파라미터의 타입으로 매핑된다. 

 

첫번째 인자 (URL)

 

백그라운드로 실행하는 작업인 doInBackground 함수의 파라미터 타입이다. 주로 처리해야할 작업의 데이터를 전달하는 용도로 사용한다. 예제 코드에서는 URL 타입으로 설정해서 다운로드 받을 파일의 주소를 전달하는 용도로 사용하고 있다.

 

두번째 인자 (Integer)

 

진행 상황을 업데이트하는 onProgressUpdate 함수의 파라미터 타입이다. 예제 코드의 doInBackground 함수에서는 다운로드 진행 상황을 publishProgress 함수로 퍼센트로 전달하고 있으며 onProgressUpdate 함수는 Integer 형태로 받아서 화면에 표시하고 있다.

 

세번째 인자 (Long)

 

백그라운드 작업 종료후 실행하는 onPostExecute 함수의 파라미터 타입이다. doInBackground 함수의 리턴값이 onPostExecute 함수의 인자 값으로 전달되며 주로 작업의 정상종료 유무를 전달하기 위해 사용한다.



출처: https://kwony91.tistory.com/entry/AsyncTask?category=851285 [아는 개발자]

번호 제목 글쓴이 날짜 조회 수
38 모바일 디바이스에서 알림을 띄우는 방식 황제낙엽 2023.11.04 1
37 여러대의 맥에서 하나의 앱 개발하기 file 황제낙엽 2022.09.17 0
36 Galaxy Z Fold3 5G Specifications 황제낙엽 2022.03.07 101
35 cell phone rotate (vertical, horizon, portrait, landscape) 황제낙엽 2021.04.14 11
34 피들러(Fiddler)를 이용하여 모바일 네트웍 감시 file 황제낙엽 2020.02.24 732
33 UIWebView, WKWebView 황제낙엽 2019.11.01 84
32 모바일웹 SMS 황제낙엽 2019.09.28 239
31 안드로이드 모바일 브라우저 캐시 지우기 황제낙엽 2019.07.23 87
» AsyncTask 황제낙엽 2019.03.25 55
29 [모바일 브라우저] Android 기기 원격 디버깅 시작하기 (PC크롬에서 모바일크롬 디버깅) file 황제낙엽 2019.01.14 125
28 TTS 이용하기 (구글, 네이버, KT) file 황제낙엽 2018.11.01 1001
27 음성합성(이하 TTS)관련 사양조사 및 시장조사 file 황제낙엽 2018.11.01 419
26 Canvas & Paint file 황제낙엽 2018.07.24 29
25 Bluetooth Connection을 사용하는 멀티플랫폼 앱 개발기 황제낙엽 2018.06.25 53
24 원격 데스크톱 환경을 위한 터치에 대한 제스쳐 목록 정의 황제낙엽 2018.06.12 239
23 팬(Pan), 스와이프(Swipe), 스크롤(Scroll), 플릭(Flick) file 황제낙엽 2017.09.11 629
22 Swift 와 Kotlin 황제낙엽 2017.07.29 77
21 위치정보(GeoLocation)에서 위도와 경도로 두 지점간 거리(distance) 구하는 오라클 Function 황제낙엽 2017.01.25 249
20 [Mysql] 위도 경도를 이용해 특정 거리안에 위치(거리) 구하기 황제낙엽 2017.01.25 357
19 [Android] / 안드로이드 / googlemap distance / 구글맵 두 위치 사이의 거리 구하기 황제낙엽 2017.01.23 97