AsyncTask는 안드로이드에서 Thread사용시 좀더 간편하게 하기위해서 만들어진 놈이다.
가장 첫번째로 설명할 것으로 이 AsyncTask에는 다음과 같은 4개의 주요한 method들이 필요하다.
1) void onPreExecute()
2) Result doInBackground(Params... params)
3) void onProgressUpdate(Progress... values)
4)void onPostExecute(Result result)
1번... 쓰레드 실행 전에 정확히 Background 실행전 실행 될 내용(initial 코드)
2번... Background 실행 내용(반복되는 내용)
3번... Background에서 변경되는 부분 Update
4번... 쓰레드 종료 후 알리는 내용
실제 예제 코드는 다음과 같은 구조로 짤 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class MainActivity extends Activity implements OnClickListener { private Button m_click; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); m_click = (Button) findViewById(R.id.bt_click_noti); m_click.setOnClickListener(this); } public void onClick(View v) { new myAsynctask().execute(); } |
메인 UI의 버튼을 통해 이벤트를 통해 쓰레드를 실행하게 했다.
그리고 AsyncTask를 사용하기위해선 subclassing을 해야한다.
<Void, Integer, Void>는 각각 Background작업의 매개변수, onProgressUpdate의 매개변수, doInBackground 의 리턴값을 말한다.
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 | private class myAsynctask extends AsyncTask<Void, Integer, Void> { @Override protected void onPreExecute() { textResult.setText("Background 작업 시작 "); super.onPreExecute(); } @Override protected Void doInBackground(Void v) { while(true) { .... if(조건) publishProgress(integer형 변수); } } @Override protected void onProgressUpdate(Integer... progress) { } @Override protected void onPostExecute(Int result) { textResult.setText("Background 작업 끝"); } } |
Background에서 while문이 실행되고 조건에 만족했을때 루프를 끝내거나 publishProgress를 사용해서 UI에 메시지를 전달할 수 있다.
보통 숫자 1,2,3 ... 을 전송하고 onProgressUpdate에서 switch-case를 써서 컨트롤하면 편리하다.
'IT > 한이음 IT멘토링(Android Programming)' 카테고리의 다른 글
07. 커스텀 리스트뷰 (0) | 2014.10.17 |
---|---|
res> style.xml에 테마관련 오류 해결법 (0) | 2014.09.14 |
05. Notification (0) | 2014.09.01 |
03. AlertDialog와 이미지 출력 (0) | 2014.08.19 |
02. Activity 생성 및 시작하기 (0) | 2014.08.13 |