23.01.30

SweetDevPotato·2023년 1월 30일
0

Activity state and ejection from memory

메모리가 필요해지면 시스템은 메모리 확보를 위해 프로세스를 죽이는 등의 조치를 해야 한다. 현재 프로세스의 상태에 따라 시스템의 행동은 조금씩 다르고, 프로세스의 상태는 그 프로세스 위애서 실행 중인 Activity 의 상태에 의해 결정된다.

  • Final Activity State : Resumed ▶ Process State : Foreground (현재 포커스를 갖고 있거나 가질 예정)

    • 시스템이 이 프로세스를 죽일 가능성 : 거의 없음
  • Final Activity State : Started/Paused ▶ Process State : Visible, but no focus

    • 시스템이 이 프로세스를 죽일 가능성 : 낮음
  • Final Activity State : Stopped ▶ Process State : Background (invisible)**

    • 시스템이 이 프로세스를 죽일 가능성 : 높음
  • Final Activity State : Destroyed ▶ Process State : Empty(∅)

    • 시스템이 이 프로세스를 죽일 가능성 : 웬만하면 죽임

Android | Processes and Threads

더보기
Processes and threads overview

이미 Application(이하 App)의 Component 가 실행중인 Process 가 존재하는 상황이 아니라면, App 을 실행할 때 Android System 은 (1) a new Linux process 을 시작하고, (2) a single thread ("main") 를 생성한다.

💡 Tip # 1
하나의 App 에 속한 모든 Components 는 하나의 Process, 하나의 Thread ("main") 에서 실행된다.
💡 Tip # 2
하지만, 필요하다면 하나의 App 안에 있는 서로 다른 Components 를 분리된 Processes 에서 실행할 수도 있다. (Manifest 파일에서 설정한다.) 뿐만 아니라 어떤 Process 에든 추가적으로 Threads 를 생성할 수가 있다.

다른 Process 를 위해 자원이 필요해져 System 이 어떤 Process 를 죽이면, kill 된 Process 에서 실행 중이던 App Components 는 destroy 된다.

어떤 Process 를 죽여야할 지 판단할 때, Android System 은 전적으로 사용자를 고려한다.

Main Thread

  1. 적절한 UI 위젯에 이벤트를 알린다.(dispatch events)
  2. App 과 Android UI toolkit Components (android.widget 패키지와 android.view 패키지의 Components) 의 상호작용이 대부분 이뤄지는 Thread 이다.
    이러한 까닭에 UI Thread 라고 불리기도 한다.

⚠️ 주의
5초 이상 UI Thread 가 block 되면, ANR(Application Not Responding, 앱이 응답하지 않음) Dialog 가 발생한다. (사용자에게 아주 불쾌한 경험!)

Android UI toolkit is NOT Thread-safe.

따라서 Worker Threads 에서 UI 를 조작하지 않도록 주의해야 한다.

Two rules to Android's single thread model

☝️ Do not block the UI thread !

✌️ Do not access the Android UI toolkit from outside the UI thread !

0개의 댓글