ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android Thread
    Programming/Android 2020. 12. 18. 14:15

    안드로이드에서 Thread

    기본적으로 한 어플리케이션 내의 모든 컴포넌트들은 같은 프로세스 내에서 동작해야 한다.

    어플리케이션이 launch되면, 안드로이드 시스템은 해당 어플리케이션이 메인쓰레드를 생성한다.

    메신 쓰레드는 UI위젯을 그리는 역할을 수행하기 때문이다. 또한 UI와 상호작용한다.

    즉, 메인쓰레드는 UI와 상호작용하는 중요할 역할을 하고 있기 때문에 UI 쓰레드라고 한다.

     

    안드로이드 시스템은 어플리케이션을 구성하는 각 컴포넌트 객체마다 쓰레드를 생성하지 않는다. 동일한 프로세스 내에서 실행되는 모든 컴포넌트들은 UI 쓰레드에서 인스턴스화 되며, 각 컴포넌트들에 대한 호출은 UI 쓰레드에서 실행된다. 결과적으로, 시스템 콜백에 응답하는 메소드들은 항상 프로세스의 UI 쓰레드에서 실행되는 것이다.

     

    그러나, 만약 모든 일들이 UI 쓰레드에서만 처리되는 경우, 네트워크 접근이나 데이터베이스를 쿼리해오는 긴 작업을 수행하게 되면 모든 UI 가 블록되는 현상이 발생한다. UI 쓰레드가 블록되면, 그리기 이벤트와 같은 모든 이벤트들이 실행되지 않는다. 그렇게 되면 사용자 입장에서는 어플리케이션이 죽은 것처럼 보이고, 심지어 UI 쓰레드가 5초 이상 블록되면 ANR "어플리케이션이 응답하지 않음" 다이얼로그가 표시되게 된다.

     

    안드로이드 어플리케이션은 단일 스레드 모델이다. 따라서, UI 쓰레드가 아닌 다른 쓰레드에서는 UI 를 건드릴 수가 없다. 그래서 UI 쓰레드가 블록되지 않도록 하는 것이 중요하다. UI 쓰레드가 블록되면 화면에 UI 가 그려지지 않기 때문이다. 따라서 즉각적이지 않은 수행작업이 있는 경우에는 별도의 다른 스레드에서 작업을 수행해야한다.

     

    안드로이드에서 UI 를 업데이트는 main Thread , 즉 UI 쓰레드에서만 진행되어야 한다. UI 를 메인 쓰레드 이외의 다른 쓰레드에서 처리하기 위해서 Handler 라는 개념이 나왔다. Handler 는 서브스레드에서 작업한 것들을 메시지 큐에 담아서 UI 쓰레드에 선입선출 방식으로 전달해주는 역할을 수행한다.

     

     

    핸들러

    루퍼

     


    컴포넌트들은 하나의 프로세스에서 실행됩니다. 앱은 여러 프로세스를 지정하여 여러 컴포넌트들을 각기 다른 프로세스에 지정하여 실행할 수 있지만, 일반적으로 단일 프로세스를 사용합니다.

    매니페스트 항목은 이 구성 요소가 실행되는 프로세스를 지정할 수 있는 android:process 특성을 지원합니다. 이러한 특성을 설정하여 각 구성 요소를 자체 프로세스에서 실행하거나 다른 구성 요소를 제외한 일부 구성 요소만 프로세스를 공유하게 할 수 있습니다. 또한, android:process를 설정하여 다른 애플리케이션의 구성 요소를 동일한 프로세스에서 실행할 수도 있습니다. 단, 이는 애플리케이션이 동일한 Linux 사용자 ID를 공유하고 동일한 인증서로 서명되었을 경우에 한합니다.

     


    developer.android.com/guide/components/processes-and-threads?hl=ko#java

     

    프로세스 및 스레드 개요  |  Android 개발자  |  Android Developers

    애플리케이션 구성 요소가 시작되고 애플리케이션에 실행 중인 다른 구성 요소가 없으면 Android 시스템은 하나의 실행 스레드로 애플리케이션의 Linux 프로세스를 시작합니다. 기본적으로 같은

    developer.android.com

     

    'Programming > Android' 카테고리의 다른 글

    RTMP (Real Time Messaging Protocol)  (0) 2022.03.31
    동영상의 이해  (0) 2022.03.31
    WebRTC  (0) 2020.12.04
    [Android] 해상도와 dpi, px, dp, dip, sp  (0) 2020.12.01
    Android LifeCycle  (0) 2020.11.30
Designed by Tistory.