Notice
Recent Posts
Recent Comments
Link
- 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 |
Tags
- Android
- blog
- rxjava
- n3문법
- KotlinInAction
- GIT
- pullrequest
- ai
- errorhandling
- 책리뷰
- suspend
- 코틀린
- webflux
- androidstudio
- PR
- jlpt
- coroutine
- 인공지능
- 안드로이드
- github
- Kotlin
- 진짜학습지
- posting
- 진짜학습지후기
- 일본어문법
- 진짜일본어
- 책추천
- CustomTab
- 학습지
- 일본어기초
Archives
코딩하는 개굴이
[안드로이드] SingleThread 상태와 MultiThread 상태 본문
반응형
시작하기 전에
# Thread란? | Thread가 무엇인지 알아보기 위해서는 Program, Process, Thread 사이의 관계를 아는 것이 이해에 도움이 될 것이다. - Program : 컴퓨터에서 어떤 작업을 위해 실행할 수 있는 "정적인 상태의 파일" 로 명령어들의 집합이다. - Process : 운영체제로부터 자원을 할당받은 "작업의 단위"로, Program의 동적인 상태라고 할 수 있다. - Thread : 프로세스가 할당 받은 자원을 이용하기 위한 "실행 흐름의 단위" 이다. |
Android에서의 Thread
Android에서 Thread는 기본적으로 Main Thread 하나만 존재한다. 해당 상태를 "Single Thread" 라고 부른다.
그러나, 하나의 Main Thread에서는 DB나 REST 등 오래 걸리는 작업들이 발생 할 경우 UI 가 느려지거나 의도한 대로 동작하지 않을 가능성이 존재한다.
JVM에서는 하나의 프로세스에서 여러 Thread를 가질 수 있도록 허용하고 있다. 따라서, 주로 Main Thread 이외의 Thread 들을 추가하여 작업한다.
이때, Main Thread 이외의 추가된 Thread들을 "Worker Thread" 라고 부른다. 그리고, 이처럼 Thread 가 2개 이상 존재하는 상태를 "Multi Thread" 라고 부른다.
# Android에서 모든 UI 작업이 Main Thread 에서 수행되도록 강제하는 이유는? |
만일 UI 작업이 개별 스레드에서 구현될 경우, Thread의 동기화 문제로 오작동할 가능성이 존재한다. 예시로 아래와 같은 작업들이 필요하고 전부 개별 Thread에서 진행이 되어야만 하는 상태라고 가정해보자. [작업] 1. Button의 배경을 RED로 바꾼다. 2. Button의 배경이 RED이면 글자색을 WHITE로 바꾼다. 3. 글자색이 WHITE이면 폰트스타일을 BOLD로 바꾼다. 위 작업에 대해서 1->2->3 이 순차적으로 진행되길 기대했지만 어떤 연유로 인해 2->1->3 으로 순서가 바뀌게 되었다면(개별 스레드이기 때문에 순서가 보장되지 않는다) 의도된 대로 동작하지 않게 될 것이다. 따라서, 안드로이드는 이러한 동기화 문제로 오작동이 발생하는 불상사를 막기위해 UI를 전부 Main Thread에서 작업되도록 강제화한다. |
Android 의 Main Thread 시작점
Android는 Kotlin으로 작업되었다고 하더라도 결국은 Java 로 실행되고, JVM은 프로그램의 시작점인 main() 함수를 찾아 시작하게 된다.
<activity android:name="com.gaegul.rainyday.presentation.MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Android에서는 위처럼 manifest의 "LAUNCHER" 카테고리의 intent filter를 가진 액티비티를 앱의 시작점으로 두고 MainThread가 만들어진다.
참고 링크
- https://dkswnkk.tistory.com/354?category=513905
- https://dkswnkk.tistory.com/379
- https://velog.io/@gparkkii/ProgramProcessThread
반응형
'안드로이드' 카테고리의 다른 글
[안드로이드] Volley 의 간단한 사용법 (0) | 2022.09.12 |
---|---|
[JAVA/안드로이드] Handler, Looper, Thread (0) | 2022.09.07 |
[안드로이드] Fastlane과 GitHub Action을 이용한 자동 배포 시스템 구축하기 - Fastlane 배포 설정 (1) (0) | 2022.05.01 |
[안드로이드] Could not connect to remote process. Aborting debug session. 해결법 (0) | 2022.03.09 |
[안드로이드] Local Notification 매일 특정 시간에 보내기 (0) | 2022.02.27 |
Comments