-
비동기식이란? (Thread, runOnUiThread)안드로이드 스킬 공부하기 2025. 2. 25. 20:22
비동기란 특정 작업을 수행할 때 메인(UI) 스레드를 블로킹 하지 않고 백그라운드에서 실행되도록 하는 방식이다.
데이터베이스 조회, 파일 읽기/쓰기, 네트워크 요청 등을 할 때 동기 방식으로 실행하면 메인 스레드가 멈춰 앱이 응답하지 않는 상태가 될 수도 있다. 따라서 이런 작업을 할 때는 비동기로 실행하면 백그라운드에서 실행하고, 완료되면 UI를 업데이트 하는 것이다.
하여 나도 프로젝트를 할 때 서버와 통신하는 과정은 비동기로 처리를 했다.
비동기식 실행 방식은 여러 종류가 있는데 우리는 새로운 스레드를 사용하는 것을 주로 했다. 이유는 딱히 없고 그걸 처음 사용했었는데 사용 방식이 간편하고 편했기 때문에 계속 사용했다.
비동기식 사용 예시
1. Thread
Handler handler = new Handler(); new Thread(()->{ try { //원하는 작업 입력 String result = httpPostBodyConnection(url, data); handler.post(() -> handleSignUpResponse(result)); Log.d("emailAuth", "try"); } catch (Exception e) { e.printStackTrace(); } }).start();
try-catch를 안 써도 오류가 안 날 때도 있지만 혹시 모르니 사용을 권장한다.
핸들러를 사용하여 서버한테 받아온 값(result)를 ui에서 처리하도록 하였다.
handleSignUpResponse()는 ui를 업데이트 하기 위해 필요한 것들을 처리하기 위해 만든 함수임으로 해당 자리에 개발자가 원하는 것을 넣으면 된다.(우리는 json형식으로 받아온 값들을 처리하는 함수였음)
2. runOnUiThread
new Thread(()->{ //원하는 작업 입력 runOnUiThread(() -> { MYrank.setText(String.valueOf(myrank) + "등"); Mynickname.setText(mynickname); Myscore.setText(String.valueOf(myscore) + "점"); }); }).start();
작성했던 코드에서 일부만 뜯어왔다.
서버와 통신 후 서버한테서 받아온 값(유저의 등수, 닉네임, 점수 등)을 UI에 바로 적용하기 위해 사용했다.
이 외에도 handler&looper 등 다양한 방식이 있지만 해당 방식들은 추후에 알아보도록 하겠다.
방식 공통점 차이점 Thread + Handler - 백그라운드에서 작업 수행 후 그 결과를 UI 스레드에서 처리 - 백그라운드 스레드(new Thread)와 Handler를 함께 사용
- handler가 메세지 큐를 관리하기 때문에 여러 작업을 하기 용이
- UI 업데이트 외에도 다양한 백그라운드 작업을 처리할 수 있음
- 코드가 길어지고 복잡해질 수 있음
-네트워크 요청이나 파일 읽기/쓰기 등에 유용runOnUiThread - 메인 스레드에서 바로 사용
- 단일 작업을 UI 스레드에서 처리하기 유용
- UI 스레드에서만 실행되며, 다른 스레드에서 작업이 필요하다면 별도로 처리해야함
- 짧고 간결함
- UI 업데이트나 간단한 결과 처리할 때 유용비슷한듯 다른 두 방식을 원하는 용도에 맞춰서 즐거운 개발 하시길
지적 환영합니다. 많이 가르쳐주세요