안드로이드는 크게 사용자가 만든 쓰레드와 UI를 담당하는 MainThread(UI Thread)가 있는데, Activity내부에서 쓰여진 코드들은 모두
UI쓰레드에서 실행된다.
그래서 쓰레드를 따로 쓰지 않고, 연산이 오래 걸릴 가능성이 있는 network 소켓을 사용한 통신을 한다 던지, file I/O 작업을 하게 되면
오류가 나며, 강제 종료 되게끔 되어있다.
왜 그런 것 일까? 우리가 안드로이드 입장이 되어 보면 당연하다. 만일 UI 쓰레드에서 네트워크 통신을 하면, 통신 하는 동안에는 UI
작업을 못하니깐, 말 그대로 화면이 멈출 것이다.
사용자가 화면을 터치해도 무반응일 것이며, 화면이 먹통이 되어버릴 것이다. 그래서 꼭 이런 작업들은 따로 사용자 스레드를 만들
어서 작업해주어야 한다.
사용법은 아래와 같다.
1: new Thread(new Runnable()
2: {
3: @Override
4: public void run()
5: {
6: //수행 할 작업 코드
7: }
8: }).start();
간단하다. But, 그런데 사용자 스레드 작업 중, UI를 변경(UI스레드에서 작업)하고 싶다면 어떻게 할까?
예를 들면 통신이 실패 해서 사용자에게 “통신이 상태가 좋지 않습니다” 라고 메세지를 띄우고 싶다면?
그럴 경우도 안드로이드는 친절히 방법을 마련해 놓았다.
아래와 같이 사용하면 된다.
1: MainActivity.runOnUiThread(new Runnable()
2: {
3: @Override
4: public void run()
5: {
6: //여기에 UI스레드에서 동작하게 하고 싶은 내용 입력
7: }
8: });
App 내에 자신이 정의한 메인엑티비티.runOnUiThread( )를 사용하면 된다. 제발 소스코드 복사 붙여 넣기 해서, “MainActivity선언이
안되어 있어요..” 라고 말도 안 되는 소리 하지 말자..
'android' 카테고리의 다른 글
안드로이드 RecyclerView 스크롤 감지 (0) | 2016.04.26 |
---|---|
네트워크 상태 체크 하기 (1) | 2016.04.26 |
ListView를 대체할 새로운 컴포넌트 Recyclerview (0) | 2016.04.24 |