1.
앱을 실행하면 프로세스라는 것이 하나 만들어집니다.
하나의 프로세스가 하나의 앱을 실행시켜준다고 볼 수 있는데요, 그 안에서는 스레드라는 것이 동작합니다.
그런데 스레드는 프로세스 안에서 여러 개 만들어질 수 있고 각각의 스레드는 독립적으로 실행될 수 있습니다.
(스레드 -> 동시에 무언가를 실행하기 위해서 생성하는 실행 단위?)
이런 스레드의 속성은 표준 자바와 다르지 않습니다.
만약 자바를 해본 적이 있다면 스레드에 대해 잘 이해하고 있겠죠?
그런데 표준 자바에서와 다른 점이 있습니다.
바로 "핸들러"라는 것을 사용해야 하는 경우가 많다는 것이죠.
핸들러가 무엇이고 어떤 경우에 어떻게 사용해야 하는지 알아봅시다.
그리고
스레드는
앱을 실행 했을 때, 메인스레드와 별도(다른 스레드 만들어서)로 실행을 할 수 있으니깐,
만들어서 실행한다면,
내부에서 알아서 리소스를 분산을 해서 cpu에서 처리하는 것들을 분산해서 처리하게 됩니다.
그리고 스레드를 가장 많이 사용하는 곳이
"애니메이션"입니다.
표준 자바에서 쓰던 스레드랑 조금 차이가 있다.
안드로이드 UI 시스템은 새로 설계가 되었다.
그래서, 스레드가 동작하는 방식이 표준 자바에 쓰는 것과는 완전히 완전히 똑같지는 않습니다.
"핸들러"라고 하는게 만들어 지고 나면 직접 UI에 접근 할 수 없게 되어 있습니다.
그래서 어떻게 처리하면 되는 거냐!?!?!!!!!!!!!!!!!!!!
2.
3. 멀티 스레드
- 데드락(DeadLock) : 동시에 어떤 리소스에 접근을 했을 떄, 시스템이 이걸먼저 처리할지, 저걸먼지 처리할지 모르는 상황이여서 멈추는 상황에 이르게 됨.
4. 핸들러 사용하기
스레드는 1. 액티비티가 있는 화면에서 실행 할 수가 있고,
2. 화면이 없는 서비스에서 사용 할 수도 있다.
5.
스레드를 만들어서 UI를 접근 할 때, 직접 접근 할 수가 없다.
그러면 스레드를 만들 었을 때는, UI를 갱신할 수 없냐?
이러면 문제가 된다...
동시작업을 하기위해서는
예를 들어 "상대방 비행기가 막 움직이는 단계에서 비행기 위치를 조정을 해야 할 거 아니에요??!!" 근데 그거 자체가 안된다고 한다면 스레드를 쓸 수 없는 상태가 되는 거죠..........
그래서, "핸들러"라고 하는 거로 해결을 할 수가 있습니다.
(동시접근을 하면 문제가 생기니깐, 동시접근을 안하게 하면 된다.
그래서 UI를 "메인 스레드"에서 접근을 한다고 했으니깐,
"메인 스레드" 안에 "핸들러"라는 것을 만들어 놓으면 됩니다!!
그렇게 한다면
다른 스레드(내가 직접만든 스레드)에서는 "메인 스레드"에 "핸들러" 쪽으로 요청을 하게 됩니다.
(어떤 것을 전달을 하며는, "이런 저런 UI에 접근을 할꺼니깐, 값을 이렇게 바꿔주세요!" 라고 요청을 합니다.)
그러면, 핸들러가 큐처럼 동작을 하게 됩니다.
그래서
"큐에 요청들어 온거"와 "메인 스레드"에서 처리해야할 내용을 순서대로 처리를 해주게 됩니다.
(예를 들어)액티비티가 시스템에서 관리하니깐 시스템에서 알아 들을 수 있는 포맷으로 "인텐트"를 날려주는 것 처럼,
핸들러는 "Message객체"라는 포맷을 이용해서 데이터를 넣어서 보낸다면, "메인 스레드"에 "핸들러"가 처리할 수있는 방식이 되는거다.
)
'■ Android > Tip' 카테고리의 다른 글
[Android] 10 - 4.스레드 사용하기(코드), 핸들러 사용 ★★(더 간단한 방법으로 핸들러 사용!) (0) | 2020.02.09 |
---|---|
[Android] 10 - 3.스레드 사용하기(코드), 핸들러 사용 ★ (0) | 2020.02.08 |
[Android] 10 - 1.설명(앞으로 할거 대충 설명) (0) | 2020.02.08 |
[Android] 인텐트(Intent)사용법(11) - 유튜브 동영상 재생하기 (0) | 2020.02.07 |
[Android] PhotoView - 사진 줌인(확대), 줌아웃(축소) 하는 방법(ImageView 아님) (0) | 2020.02.07 |