[Android SDK] runOnUiThread란? (개념과 사용법)

 

서론

 

 

 

 이전 포스팅 (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 스레드이면 바로 실행시킨다는 점에서 좀 더 효율적이라고 할 수 있습니다.)

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

 

 

 

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
action Runnable: 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 제어를 쉽게 할 수 있습니다.
 

출처: https://itmining.tistory.com/6 [에반, 어른반:티스토리]

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
47 [Android SDK] 동기와 비동기 처리의 이해 및 안드로이드에서의 적용 file 졸리운_곰 2024.05.01 120
46 [Android SDK] [Android] 안드로이드에서 Delay 구현 - Thread 졸리운_곰 2024.05.01 99
45 [Android SDK] How to implement Do nothing for a certain period of time in Android 졸리운_곰 2024.05.01 134
44 [Android SDK] Android handle을 이용한 지연처리: postDelayed 등 졸리운_곰 2024.05.01 132
43 [Android SDK] [안드로이드 스튜디오] 로딩창 구현 (ProgressBar) file 졸리운_곰 2024.05.01 126
42 [Android SDK] [Android] 안드로이드 Alert 창 띄우기 file 졸리운_곰 2024.05.01 124
41 [Android SDK] Android thread에서 Toast 호출하기 file 졸리운_곰 2024.05.01 88
» [Android SDK] runOnUiThread란? (개념과 사용법) file 졸리운_곰 2024.05.01 165
39 [Android SDK] How to enable/disable WiFi from an application? 안드로이드 와이파이 켜고 끄기 java 졸리운_곰 2024.05.01 138
38 [Android SDK] 안드로이드 화면꺼짐 방지 코드 졸리운_곰 2024.05.01 108
37 Android WebView javascriptInterface 사용하기 file 졸리운_곰 2018.03.26 656
36 안드로이드 에서 JSON 읽어오기 (JSON parser) file 가을의곰 2017.06.18 827
35 Android Basic JSOUP Tutorial file 졸리운_곰 2017.03.27 349
34 [Android] 안드로이드 웹페이지 파싱하기 - jsoup 이용하기 file 졸리운_곰 2017.03.27 724
33 Android에서 jsoup를이용하여 HTML 파서(Parser) file 졸리운_곰 2017.03.27 764
32 윈도우즈에서 IntelliJ IDEA + android 개발환경 만들기 file 졸리운_곰 2016.12.05 488
31 단말기 내부에 폴더 및 txt파일 생성하기 file 졸리운_곰 2016.05.01 171
30 wifi 연결시 알림 android source 졸리운_곰 2016.05.01 250
29 How to use Broadcast Receiver in Android – Send and Receive SMS file 졸리운_곰 2016.05.01 292
28 [Android] Layout XML - layout_weight file 졸리운_곰 2016.04.30 23630
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED