[안드로이드] runOnUiThread란? (개념과 사용법)

2016. 7. 7. 02:04· Frontend/Android


이 글은 PC 버전 TISTORY에 최적화 되어있습니다.


서론




 이전 포스팅 (Thread, Handler, Looper를 이용한 백그라운드 처리) 에서 언급했듯이, 안드로이드 OS 는 UI 자원에 Main Thread와 Sub Thread가 동시 접근하여 동기화 이슈를 발생시키는 것을 방지시키기 위해 UI 자원 사용은 UI Thread에서만 가능하도록 만들었다고 했습니다. 그래서 Handler.post( ) 와 같은 스레드 간 메시지 전달을 통해서 구현하도록 했었죠. 안드로이드에서 제공하는 Message나 Runnable 객체를 UI 스레드 쪽에서 동작시키기 원할 경우 사용하는 방법 4가지가 있습니다.



  1.  Activity.runOnUiThread( )

  2.  Handler.post( )

  3.  View.post( )

  4.  AsyncTask 클래스


 두 번째 방법은 이전 포스팅에서 사용방법을 설명했으니 참고하시고, 이번 포스팅에서는 더욱 간단하게 Sub Thread에서 UI 자원을 다루기 위한 방법인 runOnUiThead에 대해서 설명해보도록 하겠습니다. (runOnUiThread와 Handler 를 사용하는 방법의 차이는 Handler는 post 방식을 통해 매번 이벤트를 발생시키지만, runOnUiThread는 현재 시점이 UI 스레드이면 바로 실행시킨다는 점에서 좀 더 효율적이라고 할 수 있습니다.)





runOnUiThread 의 개념


Added in API level 1
void runOnUiThread (Runnable action)

Runs the specified action on the UI thread. If the current thread is the UI thread, then the action is executed immediately. If the current thread is not the UI thread, the action is posted to the event queue of the UI thread.

Parameters
actionRunnable: the action to run on the UI thread

 

 Android Developers 에서의 정의를 보면 쉽게 이해가 가능한 개념입니다. 즉 현재 스레드가 UI 스레드라면 UI 자원을 사용하는 행동에 대해서는 즉시 실행된다는 것이고, 만약 현재 스레드가 UI 스레드가 아니라면 행동은 UI 스레드의 자원 사용 이벤트 큐에 들어가게 되는 것 입니다.




runOnUi Thread 의 구조

public final void runOnUiThread(Runnable action) {
    if (Thread.currentThread() != mUiThread) {
        mHandler.post(action);
    } else {
        action.run();
    }
}

 위 코드는 실제 Activity.runOnUiThread( )의 구현 코드 입니다. 위에 설명한 정보와 정확히 일치하는 모습을 볼 수 있습니다. Thread.currentThread( )로 현재 스레드가 UI 스레드인지 확인하고 맞으면 바로 실행, 틀리면 핸들러를 통해서 UI 스레드의 이벤트 큐로 post 하는 것을 볼 수 있습니다. 




runOnUiThread 의 사용법

new Thread(new Runnable() { @Override public void run() { for(i = 0; i<=100; i++) { // 현재 UI 스레드가 아니기 때문에 메시지 큐에 Runnable을 등록 함 runOnUiThread(new Runnable() { public void run() { // 메시지 큐에 저장될 메시지의 내용 textView.setText("runOnUiThread 님을 통해 텍스트 설정"); } }); } } }).start();


자신 혼자서는 UI 자원을 절대 사용할 수 없는 Sub Thread도 Handler의 사용에 비해 이렇게 간단한 방법으로 Main Thread(UI Thread)에 소원을 빔으로서 UI 제어를 쉽게 할 수 있습니다.




반응형

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

[안드로이드] RecyclerView란? (RecyclerView와 ListView 차이)  (6) 2016.07.11
[안드로이드] 안드로이드 메모리 관리 (Weak Reference와 Soft Reference)  (0) 2016.07.08
[안드로이드] AsyncTask란? (개념 및 사용법)  (3) 2016.07.07
[안드로이드] Thread, Handler, Looper를 통한 백그라운드 처리  (10) 2016.07.06
[안드로이드] 스레드(Thread) 개념 및 사용법  (5) 2016.07.06
[안드로이드] ANR의 의미와 예방  (2) 2016.07.05
'Frontend/Android' 카테고리의 다른 글
  • [안드로이드] 안드로이드 메모리 관리 (Weak Reference와 Soft Reference)
  • [안드로이드] AsyncTask란? (개념 및 사용법)
  • [안드로이드] Thread, Handler, Looper를 통한 백그라운드 처리
  • [안드로이드] 스레드(Thread) 개념 및 사용법
에반황
에반황
"어른이면서 애이기도 하고 싶다."
에반황
에반, 어른반
에반황
전체
오늘
어제
  • 전체보기 (118)
    • About (1)
    • Backend (5)
      • Django (3)
      • Spring (2)
    • Database (2)
      • 아키텍처 (0)
      • SQL (0)
      • Redis (2)
      • 코딩 테스트 (0)
      • 요구 사항 해결 (0)
    • Infra, Cloud (0)
      • AWS (0)
      • GoCD (0)
      • Docker (0)
      • Kubernetes (0)
      • Mesos Marathon (0)
    • Basic (34)
      • C (1)
      • C# (4)
      • C++ (1)
      • Java (9)
      • Javascript (6)
      • Typescript (5)
      • GO (0)
      • Python (4)
      • 프로그래밍 기초 (1)
      • 게임 디자인 패턴 (1)
      • 운영체제 (0)
      • 알고리즘 (2)
      • 자료구조 (0)
    • Computer Science (0)
    • Frontend (74)
      • Swift (1)
      • Unity (31)
      • Android (13)
      • Vue.js (2)
      • Phaser (1)
      • Cocos2D JS (2)
      • Cocos Creator (16)
      • Facebook Instant Game (8)
반응형

인기 글

최근 댓글

hELLO · Designed By 정상우.v4.2.2
에반황
[안드로이드] runOnUiThread란? (개념과 사용법)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.