본문 바로가기

Programming/Android

What is onPreExecute, doInBackground, onPostExecute

원문 : http://arabiannight.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-AsyncTask-%EC%82%AC%EC%9A%A9%EB%B2%95




안드로이드/Android AsyncTask 사용법



안드로이드 AsyncTask 사용법에 대해 알아 보겠습니다. 안드로이드에는 UI 를 총괄하는 메인Thread가 존재 한고 있는데요.([안드로이드/Android Android에서 Thread(쓰레드) 란 무엇 인가?]메인Thread 외에는 일반Thread들이 안드로이드 UI 화면을 처리할 수 없습니다. 그렇기 때문에 메인Thread와 일반Thread 를 잘 핸들링 해서 사용해야 하는데, 여간 번거로운 일이 아닙니다.


그렇기 때문에, Android 에서는 AsyncTask 라는 객체를 지원하는데요. AsyncTask는 UI 처리 및 Background 작업 등 을 하나의 클래스에서 작업 할 수 있게 지원해 줍니다. 쉽게말해 메인Thread와 일반Thread를 가지고 Handler를 사용하여 핸들링하지 않아도 AsyncTask 객체하나로 편하게 UI를 수정 할 수 있고, Background 작업을 진행 할 수 있습니다. 각각의 주기마다 CallBack 메서드를 사용해서 말이죠.


큰 장점입니다. 


자 그럼 예제 소스를 살펴 볼까요?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package arabiannight.tistory.com.aynctask;
 
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
 
public class TestAsyncTaskActivity extends Activity {
     
    private MyAsyncTask myAsyncTask;
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        myAsyncTask = new MyAsyncTask();
        myAsyncTask.execute("80", "90", "100", "110");
         
    }
     
    // AsyncTask클래스는 항상 Subclassing 해서 사용 해야 함.
    // 사용 자료형은
    // background 작업에 사용할 data의 자료형: String 형
    // background 작업 진행 표시를 위해 사용할 인자: Integer형
    // background 작업의 결과를 표현할 자료형: Long
    // 인자를 사용하지 않은 경우 Void Type 으로 지정.
    public class MyAsyncTask extends AsyncTask<string, void,="" string=""> {
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }
         
        @Override
        protected String doInBackground(String... params) {
             
            String sum = "";
             
            if(params != null){
                for(String s : params){
                    sum += s;
                }
            }
            return sum;
        }
         
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
             
            if(result != null){
                Log.d("ASYNC", "result = " + result);
            }
             
        }
         
        @Override
        protected void onCancelled() {
            super.onCancelled();
        }
         
    }
     
}
//</string,>



1. onPreExecute() : Background 작업 시작전에 UI 작업을 진행 한다.

 @Override 
 protected void onPreExecute() {
       super.onPreExecute(); 
 }


2. doInBackground() : Background 작업을 진행 한다.

 @Override 
 protected String doInBackground(String... params) {
       super.onPreExecute(); 
 }


3. onPostExecute() : Background 작업이 끝난 후 UI 작업을 진행 한다.

 @Override 
 protected void onPostExecute(String result) 
{
       super.onPreExecute(); 
 }



FLOW를 살펴 보자면,

[onPreExecute()] -> [doInBackground()] -> [onPostExecute()] 순서가 됩니다.

'Programming > Android' 카테고리의 다른 글

Android uid 위치 (linux에서의 /etc/passwd 대신)  (0) 2017.07.15
Intent 보내기 제한 (restriction) of Android  (0) 2017.06.26
adb unauthorized issue  (0) 2016.07.21
com.android.internal ...  (0) 2016.03.16
registerReceiver  (0) 2016.03.16