728x90
Android Component
Android 앱은 컴포넌트로 구성되어 있다. Activity, Service, Broadcast Receiver, Content Provider이다. 이를 4대 컴포넌트라 부른다.
각 컴포넌트들은 하나의 독립된 형태로 존재하며, 정해진 역할을 수행한다. 컴포넌트들 간의 상호 통신은 Intent라는 일종의 메시지 객체를 사용하여 상호 통신을 진행한다.
Activity
- 사용자 인터페이스 화면을 가지며 특정 작업을 담당하는 컴포넌트
- UI를 갖는 하나의 스크린을 나타낸다.
- 최소 하나 이상의 Activity를 가지고 있어야 한다.
- 매니페스트 파일에 등록되어야 한다.
- 하나 이상의 View를 가질 수 있다.
Service
- 백그라운드에서 실행되는 컴포넌트로 오랫동안 실행되는 작업이나 원격 프로세스를 위한 작업을 할 때 사용된다.
- UI가 없다.
- 한 번 시작된 Service는 애플리케이션이 종료되고 다른 앱으로 이동해도 계속 백그라운드에서 실행된다.
- ex) 음악 재생, 네트워크를 통해 데이터를 꺼내오는 작업 등등
Broadcast Receiver
- 안드로이드 단말기에서 발생하는 다양한 이벤트, 정보를 받고 반응하는 컴포넌트이다.
- 단말기에서 발생하는 일 중 애플리케이션이 알아야 하는 상황이 발생하면 방송해준다.
- 수신기를 통해 상황을 감지하고 적절한 작업을 수행한다.
- UI 가 없다.
- ex) 배터리 부족,시스템 부팅, 전화나 문자 수신 등등.
Content Provider
- 데이터를 관리하고 다른 애플리케이션 데이터를 제공하는 컴포넌트.
- 데이터는 파일 시스템이나 SQLite 데이터베이스, 웹 상에 저장될 수 있다.
Intent
- 독립적으로 동작하는 4대 컴포넌트들 간의 상호 통신을 위한 장치이다.
- 4대 컴포넌트의 통신 수단
- 인텐트를 통해 다른 애플리케이션의 컴포넌트를 활성화 시킬 수 있다.
Activity Lifecycle
onCreate()
- 액티비티가 만들어지고 나서 최초에 실행될 때 호출된다. (한 번만 호출된다.)
- 액티비티에 필요한 리소스 초기화, View들의 일반적인 상태 설정.
- 이전 상태가 저장되어 있을 경우, 번들 객체를 참조하여 이전 상태로 복원이 가능하다.
- 다음으로 onStart()가 호출된다.
onStart()
- 액티비티가 화면에 보이기 바로 전에 호출된다.
- 매우 빠르게 끝나고 onResume() 단계로 넘어간다.
- 액티비티가 시작되기 전에 호출되는 함수, 액티비티가 멈춘 후 다시 시작되기 전에 호출되는 함수.
onResume()
- 액티비티가 사용자와 상호작용하기 바로 직전에 호출되는 함수.
- 이 함수가 호출되고 나서 바로 액티비티가 사용자에게 보인다.
- 액티비티가 화면에 보인다.
- 사용자에게 Focus를 잡은 상태이다.
onRestart()
- 액티비티가 중지된(Stopped) 이후에 호출되는 메소드로 다시 시작되기 바로 전에 호출된다.
- 액티비티가 멈춰 있다가 다시 호출될 때 불리는 함수.
다른 액티비티가 호출되는 경우
onPause()
- 다른 액티비티가 위에 올라와서 Focus를 잃었을 때 호출된다.
- 액티비티가 완전히 가려지지 않고, 부분만 가려진 상태에서 호출되는 함수이다. 즉, 일부분이 보이거나 투명상태일 경우에 호출된다.
- 다른 액티비티가 호출되기 전에 실행되기 때문에 onPause() 함수에서 시간이 많이 소요되는 작업이나 많은 일을 처리하면 다른 액티비티가 호출되는 시간이 지연되기 때문에 많은 일을 처리하지 않도록 한다.
- 영구적인 Data는 여기서 저장한다.
- 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있다.
- ex) A 액티비티에서 B 액티비티를 호출하는 경우, A 액티비티의 onPause() 함수가 먼저 호출되고 나서 B 액티비티가 실행된다.
onStop()
- 액티비티 위에 다른 액티비티가 완전히 올라와 100% 가려질 때 호출되는 함수.
- 액티비티가 사용자에게 더 이상 보이지 않을 때 호출된다.
- 이 상태에서 액티비티가 다시 불려지면 onRestart() 함수가 호출된다.
onDestroy()
- 액티비티가 완전히 스택에서 없어질 때 호출되는 함수.
- 즉, 제거되는 경우.
- finish() 메소드가 호출되거나 시스템 메모리 확보를 위해서 시스템이 강제로 종료시키는 경우에 호출될 수 있다.
728x90