이번 학기 안드로이드 수업을 들으며 기억해야 할 중요한 내용 몇 가지를 정리했습니다.
주요 내용은 다음과 같습니다.
안드로이드에서 액티비티란 애플리케이션에 사용자 인터페이스(UI)를 보여주는 요소이다.
액티비티는 사용자가 앱과 상호작용을 할 때 하나의 화면이나 사용자 작업 단위로 표시된다.
예를 들어, 우리가 앱을 사용할 때 로그인 화면이나 날씨 화면, 동영상을 보여주는 화면등을 모두 액티비티로 구현할 수 있다.
각각의 액티비티는 일련의 뷰 및 사용자의 이벤트 처리 로직등을 포함할 수 있다.
안드로이드의 액티비티는 특정한 상태 및 생명 주기를 갖고 있다.
액티비티가 실행 할 때 부터 종료 될 때 까지 사용자의 상호작용에 따라 생명 주기 상태를 이동하게 된다.
이 때 액티비티의 상태에 따라 생명 주기 함수가 자동적으로 호출되는데,
액티비티의 대표적인 상태는 총 3가지이다.
Activity Runnning
Stop
Pause
액티비티가 사용자에게 보여지고 포커스된 상태이다.
액티비티가 현재 사용자와 상호작용이 가능한 상태를 의미한다. 이 상태에서는 액티비티는 최상위에 위치하게 되며 사용자 입력을 받고 UI를 업데이트 한다.
액티비티가 처음 생성될 때, 일시 정지 상태에서 다시 돌아올 때 활성 상태로 진입하게 된다.
호출되는 메소드
onCreate()
액티비티가 처음 생성될 때 호출되는 메소드이다.
일반적으로 액티비티에 대한 초기화 작업(Initialize
)이 이루어진다.
onStart()
액티비티가 사용자에게 보여지기 전에 호출되는 메소드이다.
액티비티의 화면이 보여지고 사용자의 입력을 받을 준비가 된다.
onResume()
액티비티가 사용자와 상호작용하기 시작할 때 호출되는 메소드이다.
이 단계에서는 액티비티가 실행 중이며 포커스를 받고 사용자의 입력을 처리한다.
현재 액티비티가 부분적으로 가려지거나 포커스를 잃은 상태이다.
이 때 액티비티는 여전히 사용자에게 보이지만 다른 액티비티 또는 시스템의 팝업창에 의하여 일부 가려지거나 영향을 받은 상태이다. 비활성 상태에서는 일부 UI의 업데이트를 제한하며 백그라운드 상태에서 자원을 아낄 수 있다.
예를 들면 현재 화면에서 다이얼로그가 나와 해당 다이얼로그에 포커스를 가지면 해당 액티비티는 비활성 상태가 되는 것이다.
호출되는 메소드
onPause()
액티비티가 일부 가려지거나 포커스를 잃을 때 호출되는 메소드이다.
다른 액티비티나 시스템 팝업창에 가려질 경우에도 호출될 수 있다.
이 메소드에서는 일부 UI의 업데이트를 제한하거나 자원을 해제하는 작업을 할 수 있다.
액티비티가 더이상 사용자에게 보여지지 않고 완전히 가려진 상태이다.
이 상태에서 액티비티는 다른 액티비티에 의해 완전히 가려지거나 현재 액티비티가 백그라운드로 이동할 때 발생하는 상태이다. 일시 정지 상태에서는 UI 업데이트를 제한하고 필요한 경우에는 자원을 해제하여 시스템 리소스를 아낄 수 있다.
일시 정지된 상태의 액티비티는 재개되거나, 소멸될 수 있다.
호출되는 메소드
onStop()
액티비티가 더 이상 사용자에게 보이지 않을 경우 호출되는 메소드이다.
onRestart()
onStop()
상태에서 다시 액티비티가 시작되기 전에 호출되는 메소드이다.
일시 정지 상태에서 다시 시작될 때 실행되는 메소드이며 다시 활성 상태가 되기 전에 필요한 초기화 작업을 수행할 때 사용한다.
onDestroy()
액티비티가 소멸되기 전에 호출되는 메소드이다.
액티비티가 완전히 종료되기 직전에 리소스 해제 및 사용자 데이터를 저장하는 등의 정리 작업을 수행한다. 이 메소드가 호출된 이후는 액티비티가 메모리 해제가 되며 완전히 종료 된다.
🧱
Intent
는 안드로이드의 컴포넌트 간의 통신을 위해 사용되는 객체이다.
주로 액티비티간의 전환에 사용되며 다른 컴포넌트와의 데이터를 공유하거나 액션을 수행하기 위해 사용된다.
인텐트는 다음의 종류로 나뉜다.
Intent
Intent
명시적 인텐트는 목적지의 컴포넌트를 직접 지정한다.
이를 통해 특정 컴포넌트와 상호작용 할 수 있다. 예를 들어 특정 액티비티로 전환하거나 서비스를 시작하는데 사용할 수 있다.
암시적 인텐트는 컴포넌트의 식별자 정보가 없어도 작업을 수행할 수 있다.
예를 들어 암시적 인텐트를 사용해 카메라 앱을 실행해 사진을 촬영하거나 웹 브라우저 앱을 실행하여 웹 URL을 열 수 있다.
즉 두 인텐트의 차이점은 인텐트가 가리키는 컴포넌트가 명확한지, 불분명하냐에 따라서 달라진다고 볼 수 있다.
앱이 수신할 수 있는 인텐트의 유형을 정의하는 기능
인텐트 필터는 안드로이드 프로젝트의 AndroidManifest.xml
에 등록되어 있다.
여기서 해당 앱이 어떤 종류의 인텐트를 처리할 수 있는지 시스템에 알려준다.
인텐트 필터는 명시적,암시적 인텐트 모두에 사용할 수 있다.
명시적 인텐트의 경우에는 컴포넌트의 클래스명을 직접 지정해 명확한 대상을 지정할 수 있다.
암시적 인텐트에서는 인텐트 필터에 수신할 수 있는 인텐트 유형을 동적으로 결정할 수 있다.
예를 들어 다른 앱에서 전화를 걸기 위해 전화 앱을 사용하려면 전화 걸기 작업을 처리할 수 있는 인텐트 필터를 등록 해야한다.
해당 앱이 백그라운드에서 실행되는 컴포넌트이다.
서비스는 사용자 인터페이스를 가지지 않고 백그라운드에서 오래 실행되는 작업을 의미한다.
주로 네트워크 요청, 파일의 다운로드, DB 처리등과 같은 작업을 처리하는 데 사용한다.
서비스의 종류는 크게 3가지 유형이다.
Foreground Service
Background Service
Bound Service
Foreground Service
는 사용자에게 눈에 띄는 작업을 수행한다.
사용자의 상태표시줄에 보이는 등의 형태인데, 우리가 흔히 사용하는 뮤직 플레이어가 그 예이다. 음악을 들을 경우 상태표시줄에 현재 재생되고 있는 음악이 나오는데 이 상태에서 다른 앱을 실행해도 음악은 계속 나오는 경우이다.
안드로이드 시스템에서 발생하는
Broadcast 메시지
를 수신하는 컴포넌트
여기서 안드로이드 시스템에서 발생하는 Broadcast 메시지
란, 시스템 이벤트 또는 앱 간의 통신이다. 예를 들면 핸드폰의 배터리 부족 경고, 메세지 수신 알람 등이 그 예이다.
안드로이드 앱에서는 Broacast Receiver
를 통해 등록된 Broadcast 메시지
를 필터링하여 수신해 필요한 작업을 수행할 수 있다.
이러한 기능등을 Broadcast Receiver
를 통해 구현할 수 있다.
앱 간의 데이터 공유를 위한 인터페이스를 제공하는 컴포넌트
일반적으로 앱은 하나의 프로세스로 실행되며 자신의 프로세스에서 사용하는 데이터는 자신만 접근하도록 되어있다.
하지만 사용자의 사진첩에 있는 사진,동영상 또는 연락처 정보들을 가져와야 할 경우에는 다른 앱에서 정보들을 가져와야하는데 이 때 Content Provider
는 앱 간의 데이터 공유를 할 수 있는 기능을 제공해준다.
주로 DB, 로컬 파일 또는 네트워크에 저장된 구조화된 데이터에 대한 CRUD
작업을 제공하고 다른 앱에서 데이터를 읽거나 쓸 수 있도록 안드로이드 시스템에서 제공해주는 기능이다.