1 minute read

★Process : 기본적으로 한 앱의 컴포넌트들은 같은 프로세스에서 동작한다. 왠만해선 바꿀 일 없지만 매니페스트의 application태그나 각 컴포넌트의 태그에 android:process속성으로 프로세스명을 지정 가능하다.

★프로세스는 독자적인 실행환경이며 메모리 공간이 할당되고, 자신만의 데이터를 갖는다.

★메모리가 부족한 시점에서 안드로이드는 우선순위가 낮은 프로세스부터 제거해 나간다.

★프로세스 우선순위

  1. Foreground : 유저가 사용중인 맨 위에 있는 액티비티(onResume)를 포함한 프로세스, 그리고 이 액티비티가 사용중인 서비스가 소속된 프로세스, onCreate나 onStart나 onDestroy를 실행중인 서비스가 소속된 프로세스, onReceive가 동작중인 Broadcase Receiver가 소속된 프로세스, startForeground()로 호출한 서비스의 소속프로세스.
  2. Visible : 포그라운드는 아니지만 화면의 일부분에서 아직 보이고 있는 액티비티(onPause)가 있는 프로세스이다. 또는 그 액티비티와 상호작용중인(바인딩 된) 서비스를 가진 프로세스도 Visible이다. 이런 서비스가 종료되면 액티비티 역시 제대로 동작할 수 없기 때문이다.
  3. Service : startService로 시작된 서비스가 진행중인 프로세스. 사용자가 서비스 실행중임을 알 수 있는 상태이다.
  4. Background : 유저에게 보이지 않는(onStop) 액티비티 밖에 없는 프로세스. 이런 프로세스는 꽤 많기 때문에 선입선출방식으로 제거된다.
  5. Empty : 프로세스 내에서 실행중인 컴포넌트가 없고, 단지 캐싱의 목적으로 남겨둔 프로세스

★기본적으로 상호작용중인 프로세스끼리는 순위가 더 높은 쪽으로 맞춰진다.

★Thread : 기본적으로 한 앱이 시작되면 프로세스가 만들어 지고, 메인 스레드(UI Thread)가 자동으로 생성되어 앱을 실행시킨다.

★Thread를 사용하는 2가지 규칙

  1. UI스레드는 Block되어서는 안된다.
  2. 다른 스레드는 UI를 건드릴 수 없다. 긴 시간 작업이 필요한 경우 워커 스레드에서 실행해야 하며 스레드간의 통신으로 UI업데이트를 메인스레드에게 맡겨야 한다. 이 경우 주로 Handler, Looper를 사용한다.

Categories:

Updated: