Java

Java_ runOnUiThread , view.post , handler 의 차이

JunsC 2024. 9. 12. 13:04
728x90

작업을 하면서 성능 및 메모리상 구조적으로 좋은쪽으로 짜려고 하다보니 궁금한게 많아져서 끄적끄적이고 있다.

 

우선 위의 3가지는 겉으로 보기에는 같은 기능을 가지고 있지만 세부적으로 보면 용도와 그 기능들이 차이가 있다!!


runOnUiThread

동작: 현재 스레드가 UI 스레드가 아닐 경우, UI 스레드에서 작업을 즉시 실행. 현재 스레드가 이미 UI 스레드인 경우, 작업은 즉시 실행.

용도: UI 스레드에서 작업을 실행해야 하지만 현재 스레드가 UI 스레드가 아닌 경우에 사용

성능: 즉시 실행되므로 지연이 없음.

메모리: 메모리 사용량에 큰 영향을 미치지 않음. UI 스레드에서 직접 작업을 수행.

 

View.post

동작: 지정된 View의 UI 스레드의 메시지 큐에 작업을 추가. View가 화면에 표시된 후 작업을 실행.

용도: View가 화면에 표시된 후에 작업을 실행할 필요가 있을 때 사용. 예를 들어, 레이아웃이 완전히 그려진 후에 작업을 실행해야 하는 경우 유용.

성능: 작업이 UI 스레드의 메시지 큐에 추가되므로, 즉시 실행되지 않고 약간의 지연이 있을 수 있음.

메모리: 지연된 작업이 메시지 큐에 저장되므로 메모리 사용량이 약간 증가할 수 있음.

 

Handler

동작: Handler를 사용하여 메시지 큐에 작업을 추가합니다. Handler는 지정된 Looper와 연관된 스레드에서 작업을 실행.

용도: 특정 스레드에서 작업을 지연시키거나 큐에 작업을 추가할 때 사용. Handler를 사용하여 메인 스레드에서 작업을 지연시키려면 Looper.getMainLooper()를 사용.

성능: Handler를 사용하여 메시지 큐에 작업을 추가하므로, 작업이 실행되기까지 약간의 지연이 있을 수 있음.

메모리: Handler가 메시지 큐에 작업을 추가하기 때문에 메모리 사용량이 증가할 수 있으며, 특히 많은 작업을 큐에 추가할 때 메모리 관리에 주의.

주요 차이점

  1. 동작 시점:
    • runOnUiThread: 현재 스레드가 UI 스레드가 아니면, UI 스레드에서 즉시 실행합니다.
    • View.post: 지정된 View의 UI 스레드의 메시지 큐에 작업을 추가하여 View가 화면에 표시된 후 실행합니다.
    • Handler: 지정된 Looper와 연관된 스레드에서 작업을 큐에 추가하고, 큐에서 작업을 실행합니다.
  2. 용도:
    • runOnUiThread: UI 스레드에서 작업을 즉시 실행해야 할 때.
    • View.post: View가 화면에 표시된 후 작업을 실행해야 할 때.
    • Handler: 특정 스레드에서 작업을 지연시키거나 큐에 추가해야 할 때.
  3. 성능 및 메모리:
    • runOnUiThread: 즉시 실행되므로 지연이 없음. 메모리 오버헤드가 거의 없음.
    • View.post: 약간의 지연이 있을 수 있음. 메모리 오버헤드가 약간 있을 수 있음.
    • Handler: 지연이 있을 수 있으며, 많은 작업을 큐에 추가할 경우 메모리 관리에 주의 필요.

결론

  • 즉시 UI 스레드에서 작업을 실행해야 하는 경우: runOnUiThread를 사용하는 것이 적합.
  • View의 상태에 따라 작업을 지연시키고 싶은 경우: View.post를 사용할 수 있음.
  • 특정 스레드에서 작업을 지연시키거나 큐에 추가할 필요가 있는 경우: Handler를 사용하는 것이 적합.