[안드로이드]AsyncTask 설명

2020. 9. 7. 14:41 안드로이드/안드로이드 TIP

AsyncTask는 handler와 thread 사용을 편리하게 사용하기 위해 만들어진 클래스이다.


한 클래스 안에서 Ui작업과 비즈니스 로직 처리가 모두 가능하기 때문에 간편하다.


하지만 하나의 객체로 재사용이 불가능한 엄청난 단점이 있지만


객체를 새롭게 생성해서 사용하면 된다. 하지만 메모리 효율이 그만큼 나빠 질 수 있다는점.


사용하는 방법은 아래 코드를 보면 대충 이해가 갈것이다.


사용예는 엄청나게 많이 쓰인다. 다운로드나 로그인, 등등 UI와 로직이 같이 실행되야 되는 


부분은 거의 모두 AsyncTask를 사용한다고 보면 된다.


AsyncTask는 내부 클래스를 사용해서 구현해야된다. 구글 레퍼런스 문서에도 그렇게 나와있다.


내가 생각되는 이유는 간단하다. 내부클래스로 구현함으로써 메모리를 절약할 수 있고, 재사용을 위해서 


객체를 생성해서 사용하기 위해서 이다.

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
public void asyncTaskCall() {
    new TestAsyncTask().execute();
}
 
private class TestAsyncTask extends AsyncTask<Void, Integer, Void>    
       // doInBackground 메소드가 실행되기 전에 실행되는 메소드
    @Override
    protected void onPreExecute() {
        // UI 작업을 수행하는 부분
        super.onPreExecute();
    }
 
    // 실제 비즈니스 로직이 처리될 메소드(Thread 부분이라고 생각하면 됨)
    @Override
    protected Void doInBackground(Void... params) {
        // onProgressUpdate에서 0이라는 값을 받아서 처리
        publishProgress(0);
        return null;
    }
 
    // doInBackground에서 넘긴 values 값을 받아서 처리하는 부분
    @Override
    protected void onProgressUpdate(Integer... values) {
        switch(values[0]) {
        case 0:
            // doInBackground에서 publicshProgress로 넘긴값을 처리하는 부분
            break;
        }
        super.onProgressUpdate(values);
    }
 
    // 모든 작업이 끝난 후 처리되는 메소드
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
    }
 
}

출처 : https://blog.woniper.net/146?category=532432