안드로이드 프로세스
서비스는 백그라운드에서 돌아가고 스타트 서비스에서 돌아가면 서비스 프로세스라고 한다.
591p 스레드가 중요하다. 애플리케이션 실행을 위한 스레드를 생성하는데 이를 메인 스레드라고 한다. 인터페이스 위젯에 이벤트를 전달 or 화면에 그리는 작업을 담당
메인스레드 5초 이상 블락 되어있다면 application not responding (ANR) 뜬다. 긴 작업은 메인스레드 작업 ㄴㄴ
우리는 핸들러를 사용해 왔다 WHY?
5초이상 블락 X , UI쓰레드는 블록 시키면 안된다. 다른 쓰레드에서 UI쓰레드를 접근하면 안됨
596P Runnable를 이용한 쓰레드
598 쓰레드에서 UI를 조작하는 방법
핸들러는 메인UI쓰레드에 붙는다.
안에 Message Que가 있다 그 안에는 작업 쓰레드에서 날라온 메시지들을 담아 놓으면 Looper가 차례대로 돌면서 수행시켜줌
메시지는 핸들러랑 붙어 있음... 메시지에 Runnable객체도 들어간다.
post메소드는 messageQue에 집어 넣는 역할을 한다.
핸들러와 메세지는 메인스레드에 붙어있다. 그리고 메시지핸들러(핸들메시지 메소드)를 호출하는 방법 send Message...
메신저안에 있는 send 메소드는 안에 msg를 집어 넣으면 msg는 핸들러 안에 있는 handleMessage( )로 전달... 그러면서 sen메시지 호춢
mss.send(msg) -~~~~~~~~~> handleMessage( )
핸들러 안에 있는 핸들메시지를 호출하는 메소드가 send 메소드다...
핸들러에 자기 자신을 호출하는 sendMessage( )가 있다. 이놈도 handleMessage( ) 를 호출 한다.
단, 메신저 안에는 send만 있고 핸들러에는 sendMessage등 ... 샌드 딜레이~~ 등 다양한 메소드가 존재한다.
이 안에서 UI를 건드릴 수 있기 때문에 handleMessage( ) 를 호출 하는거다.
핸들러 안에서 sendMessage(null); 하면 handleMessage( ) 계속 실행....
더 쉬운 방법은 599P?
ImageView에 무슨 작업을 하고 싶으면 post를 한 번 더 붙인다.
ImageView를 직접 SET하면 에러가 나니까.... 이런 작업을 거친다.
메시지 큐로 Runnable객체를 넣어 준다...