비동기 처리란
동기화 프로세스: 특정 작업을 순서대로 실행합니다.
비동기 처리: 한 태스크가 실행 중일 때 다른 태스크가 다른 처리를 수행합니다.
왜 비동기 처리해야 하는가?
만약, 비동기 처리를 하지 않았던 경우를 생각해 보겠습니다.
Android나 Swift, web 어플리 등에서 사용자가 조작하고 있을 때, 예를 들면 무언가 정보(동영상 일람·검색 결과 일람 등)를 취득할 때, 동기 처리라면 취득의 처리가 끝날 때까지는 UI 등의 다른 의 처리를 일절 할 수 없고 화면은 멈춘 채로 됩니다.
그렇게 되면, 유저로부터 하면 앱이 멈춘(버그의) 것처럼 느껴 버립니다.
비동기 처리로 구현하면 UI 화면을 좋은 느낌으로 보이면서, 병행하여 정보 취득(동영상 일람·검색 결과 일람 등)의 처리를 실시할 수 있습니다. 그렇게 함으로써 사용자는 지금 정보를 얻고 있음을 제시할 수 있으며 오해를 주지 않습니다.
잘 보면, Youtube나 SNS 등도 로드 중은 화면상에 움직이는 로딩 화면이 표시되는 장면을 자주 볼 수 있습니다.
AsyncTask란?
Android 비동기 처리에는 Handler 또는 ThreadHandler 클래스를 사용할 수 있지만 이러한 Helper Class로 AsyncTask가 있습니다.
AsyncTask는 다른 방법보다 쉽게 비동기 처리할 수 있습니다.
AsyncTask의 주요 방법
onPreExecute()
doInBackground 메서드를 실행하기 전에 주 스레드에서 실행됩니다.
비동기 처리 전에 무언가 처리를 하고 싶을 때 등에 이용.
doInBackground()
메인 스레드와는 다른 스레드에서 실행됩니다.
비동기로 처리할 내용을 설명합니다.
※유일 실장이 필수
onProgressUpdate()
메인 스레드에서 실행됩니다.
도중 경과를 메인 thread에 돌려줍니다.
비동기 처리의 진행 상황을 진행 표시줄에서 표시하고 싶을 때 등에 사용할 수 있습니다.
onPostExecute()
doInBackground 메서드를 실행한 후 메인 스레드에서 실행됩니다.
결과를 메인 thread에 돌려줍니다.
doInBackground 메서드의 반환 값을 이 메서드의 인수로서 받아, 그 결과를 화면에 반영시킬 수가 있습니다.
※실행 순서
1.onPreExecute()
2.doInBackground()
3.onProgressUpdate() ※doInBackground()로 publishProgress()가 불려 갔을 경우에 처리.
4.onPostExecute()
이용 장면
STEP1:AsyncTask를 상속하는 클래스를 만듭니다.
class asyncTask extends android.os.AsyncTask{
@Override
protected Object doInBackground(Object... obj){
}
2단계: 각 메서드 내용 입력(doInBackground 필요)
class asyncTask extends android.os.AsyncTask{
//※이 인수는 Object 이지만, 형을 지정하는 것도 가능하다.
@Override
protected Object doInBackground(Object... obj){
//여기에 처리를 기술
System.out.plintln("비동기 처리의 내용을 여기에 기재 합니다.")
//인수를 취득하는 것도 가능합니다.
String message = (String)obj[0];
}
STEP 3 : 메인 스레드에서 STEP1, 2에서 만든 클래스를 인스턴스 화하고 execute 메서드로 호출
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// task 작성
mAsyncTask = new asyncTask(textView);
// task 실행
mAsyncTask.execute("여기 asyncTask에 전달하고 싶은 인수를 적는다.");
}
}
이용 시의 주의점
doInBackground에서 메인 스레드에 직접 처리하면 예외가 발생합니다.
요약
· AsyncTask는 비동기 처리에 이용 가능
· AsyncTask는 다른 방법보다 간단하게 비동기 처리를 이용할 수 있다
· AsyncTask를 이용할 때는 doInBackground는 필수
'개발 > 안드로이드 어플' 카테고리의 다른 글
DialogInterface.OnClickListener 인터페이스 (1) | 2022.12.21 |
---|---|
[Android] 데이터베이스 SQLite를 쉽게 작성 (1) | 2022.12.17 |
안드로이드 어플 개발 Context 이용 (0) | 2022.12.13 |
[안드로이드] Handler 란? 스레드로 View 갱신을 하면 강제 종료! 그럴 때 유용합니다! (0) | 2022.12.08 |
[안드로이드]Looper의 목적은 무엇일까? 또 그 사용법은? (2) | 2022.12.08 |
댓글