본문 바로가기

Android

[8일차] 안드로이드 쓰레드 동작방식

안드로이드 2권

쓰레드, 커스텀 ui 애니메이션, 번들, 



스레드  Thread


중요한건 스레드 간 통신이다. 어떻게 주고 받는지를 알아야 된다. 
쓰레드에서 배우는게 핸들러, 핸들러 처리하는거
 프로세스는 자원을 독립적으로 관리한다. 


다른말로는 메모리를 공유하지 않는다. 별도의 메모리 스페이스를 갖는다. 

UI 스레드 라고도 한다. 


쓰레드 간에는 메모리를 공유 


Stack이 필요하고 쓰레드의 정보를 저장하는걸 ThreadLocal이라고 한다. 

메인쓰레드 말고 별도 쓰레드의 필요성

ANR Dialog 


쓰레드가 응답하지 않을경우 띄워주는 Dialog 시간이 많이 걸리면 뜨기때문에 시간이 많이 걸리는 작업은 별도의 처리를 해줘야한다. 


Network 처리


Api14이상부터 네트워크는 메인스레드가 할 수 없다. 그렇기 때문에 네트워크 연결 되어 있는 상태에서는 메인쓰레드는 Blocking 되어있다. 


SurfaceView 처리

반복적으로 하는 것은 메인쓰레드가 하지 못하므로, 
SurfaceView 를 이용하여 별도의 Surface를 생성한 경우, 일반적으로 그림을 그리는 작업은 Loop를 돌면서 처리한다. 이것 역시 메인쓰레드가 하지 못한다. 



그래서 안드로이드는 쓰레드를 만들어서 써야한다. 


쓰레드를 만들때, 내가 쓰레드를 계속 만들어쓰면, 성능저하가 온다. 

그래서 쓰레드풀을 하는거다. 

ㅆ레드를 만들어서 재활용하고, 하는거다. 

ThreadLocal

같은 객체의 주소를 가르키지만 쓰레드내 에서 다른 객체처럼 쓰고 싶을때,

ThreadAnnotation 

@MainThread pulbic void deliverResult(D data) 메인 쓰레드에서만 실행
@UIThread 이것도 메인쓰레드 일반적으로 Main 이랑 UIThread를 같다. 

Event Loop


이러한 ㅇ걸 만들어줄 때 사용하는 클래스를 Looper라고 한다. 
이벤트큐를 만들어서 돌린다. 
여기서 getNextEvent로 계속 빼서 이벤트를 돌린다. 

여기서 이벤트를 넣을때 사용하는 걸 핸들러 라고 한다. 

메인스레드는 시작하자마자 loop을 만들어서 돌린다. 

필요할 때마다 만들 수 있다. 

내가 새로운 이벤트를 확장할 수 있다. 

Handler

메세지 Loop 에다가 이벤트를 넣을 때 사용하는 거 . 

new Handler하면 된다. 

이 코드를 실행하는 쓰레드가 가지고 있는 메세지 Q에 Handler가 만들어지는거다 


Thread 간 통신 

메인쓰레드 밖에 화면 갱신을 못한다. 

그래서 받아온 데이터를 메인스레드의 메세지 큐를 호출해서 화면 갱신 요청을 한다. 

Handler 사용

객체생성, 전송, 처리, 에 사용할 수 있다. 


'Android' 카테고리의 다른 글

[8일차] AsncTask  (0) 2016.07.22
[8일차]핸들러 다루기  (0) 2016.07.22
[8일차] ButterKnife  (0) 2016.07.22
[8일차]스타일과 테마  (0) 2016.07.22
[8일차] 6.0이상 임의적 퍼미션설정  (0) 2016.07.22