- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] runOnUiThread란? (개념과 사용법) 본문
서론
이전 포스팅 (Thread, Handler, Looper를 이용한 백그라운드 처리) 에서 언급했듯이, 안드로이드 OS 는 UI 자원에 Main Thread와 Sub Thread가 동시 접근하여 동기화 이슈를 발생시키는 것을 방지시키기 위해 UI 자원 사용은 UI Thread에서만 가능하도록 만들었다고 했습니다. 그래서 Handler.post( ) 와 같은 스레드 간 메시지 전달을 통해서 구현하도록 했었죠. 안드로이드에서 제공하는 Message나 Runnable 객체를 UI 스레드 쪽에서 동작시키기 원할 경우 사용하는 방법 4가지가 있습니다.
-
Handler.post( )
-
View.post( )
두 번째 방법은 이전 포스팅에서 사용방법을 설명했으니 참고하시고, 이번 포스팅에서는 더욱 간단하게 Sub Thread에서 UI 자원을 다루기 위한 방법인 runOnUiThead에 대해서 설명해보도록 하겠습니다. (runOnUiThread와 Handler 를 사용하는 방법의 차이는 Handler는 post 방식을 통해 매번 이벤트를 발생시키지만, runOnUiThread는 현재 시점이 UI 스레드이면 바로 실행시킨다는 점에서 좀 더 효율적이라고 할 수 있습니다.)
runOnUiThread 의 개념
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();
}
}
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
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 제어를 쉽게 할 수 있습니다.
출처: http://itmining.tistory.com/6 [IT 마이닝]
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] Device Administration (9) | 2017.05.18 |
---|---|
[안드로이드] AsyncTask란? (개념 및 사용법) (0) | 2017.05.17 |
[안드로이드] Android 블루투스 개발 (3) | 2016.06.03 |
[안드로이드] 블루투스 활성/비활성화 (on/off) (0) | 2016.06.01 |
[안드로이드] 이클립스 내에서 안드로이드 제공하는 소스 난독화(ProGuard) 적용 (0) | 2016.06.01 |