작업을 하면서 성능 및 메모리상 구조적으로 좋은쪽으로 짜려고 하다보니 궁금한게 많아져서 끄적끄적이고 있다.
우선 위의 3가지는 겉으로 보기에는 같은 기능을 가지고 있지만 세부적으로 보면 용도와 그 기능들이 차이가 있다!!
runOnUiThread
동작: 현재 스레드가 UI 스레드가 아닐 경우, UI 스레드에서 작업을 즉시 실행. 현재 스레드가 이미 UI 스레드인 경우, 작업은 즉시 실행.
용도: UI 스레드에서 작업을 실행해야 하지만 현재 스레드가 UI 스레드가 아닌 경우에 사용
성능: 즉시 실행되므로 지연이 없음.
메모리: 메모리 사용량에 큰 영향을 미치지 않음. UI 스레드에서 직접 작업을 수행.
View.post
동작: 지정된 View의 UI 스레드의 메시지 큐에 작업을 추가. View가 화면에 표시된 후 작업을 실행.
용도: View가 화면에 표시된 후에 작업을 실행할 필요가 있을 때 사용. 예를 들어, 레이아웃이 완전히 그려진 후에 작업을 실행해야 하는 경우 유용.
성능: 작업이 UI 스레드의 메시지 큐에 추가되므로, 즉시 실행되지 않고 약간의 지연이 있을 수 있음.
메모리: 지연된 작업이 메시지 큐에 저장되므로 메모리 사용량이 약간 증가할 수 있음.
Handler
동작: Handler를 사용하여 메시지 큐에 작업을 추가합니다. Handler는 지정된 Looper와 연관된 스레드에서 작업을 실행.
용도: 특정 스레드에서 작업을 지연시키거나 큐에 작업을 추가할 때 사용. Handler를 사용하여 메인 스레드에서 작업을 지연시키려면 Looper.getMainLooper()를 사용.
성능: Handler를 사용하여 메시지 큐에 작업을 추가하므로, 작업이 실행되기까지 약간의 지연이 있을 수 있음.
메모리: Handler가 메시지 큐에 작업을 추가하기 때문에 메모리 사용량이 증가할 수 있으며, 특히 많은 작업을 큐에 추가할 때 메모리 관리에 주의.
주요 차이점
- 동작 시점:
- runOnUiThread: 현재 스레드가 UI 스레드가 아니면, UI 스레드에서 즉시 실행합니다.
- View.post: 지정된 View의 UI 스레드의 메시지 큐에 작업을 추가하여 View가 화면에 표시된 후 실행합니다.
- Handler: 지정된 Looper와 연관된 스레드에서 작업을 큐에 추가하고, 큐에서 작업을 실행합니다.
- 용도:
- runOnUiThread: UI 스레드에서 작업을 즉시 실행해야 할 때.
- View.post: View가 화면에 표시된 후 작업을 실행해야 할 때.
- Handler: 특정 스레드에서 작업을 지연시키거나 큐에 추가해야 할 때.
- 성능 및 메모리:
- runOnUiThread: 즉시 실행되므로 지연이 없음. 메모리 오버헤드가 거의 없음.
- View.post: 약간의 지연이 있을 수 있음. 메모리 오버헤드가 약간 있을 수 있음.
- Handler: 지연이 있을 수 있으며, 많은 작업을 큐에 추가할 경우 메모리 관리에 주의 필요.
결론
- 즉시 UI 스레드에서 작업을 실행해야 하는 경우: runOnUiThread를 사용하는 것이 적합.
- View의 상태에 따라 작업을 지연시키고 싶은 경우: View.post를 사용할 수 있음.
- 특정 스레드에서 작업을 지연시키거나 큐에 추가할 필요가 있는 경우: Handler를 사용하는 것이 적합.
'Java' 카테고리의 다른 글
Java_ HILT (0) | 2024.09.19 |
---|---|
Java_ 지역변수 , 인스턴스 변수 차이 (0) | 2024.09.12 |
Java_ head up notification. (0) | 2024.08.26 |
Java_ Rxjava blockingGet , subscribe ... (0) | 2024.08.25 |
Java_ Lazy Singleton (0) | 2024.08.25 |