본문 바로가기

안드로이드/Guide

안드로이드 개발 - (3) Android Component: Activity

Android Component(구성요소)는 안드로이드 개발에 있어 가장 중요한 기본이라 할 수 있다. 4대 컴포넌트라고도 불리며 Activity, Service, Broadcast Receiver, Content Provider 이다. 

그중 Activity에 대해 먼저 알아보고자 한다.

 

Activity

 - 사용자와 앱간의 상호작용을 할 수 있는 화면(View)을 제공한다. Activity에 UI를 배치할 수 있다.

 - 생명주기(Lifecycle) 상태별 콜백 메서드가 존재하며, 각 메서드는 Lifecycle의 상태 변화에 알맞은 특정 작업을 수행할 기회를 제공한다.

Activity Lifecycle

메서드

설명

중단가능

다음

onCreate()

시스템에서 Activity를 처음 생성할 때 호출

setContentView() 를 호출하여 UI 레이아웃을 정의

일반적인 정적 설정을 모두 수행(뷰 생성, 목록에 데이터 바인딩하기 등)

이 메서드에서는 Activity의 이전 상태가 캡처된 경우 해당 상태를 포함한 번들 객체가 전달

X

onStart()

onRestart()

Activity가 중단되었다가 다시 시작되기 직전에 호출

X

onStart()

onStart()

Activity가 사용자에게 표시되기 직전에 호출

X

onResume()

onStop()

onResume()

Activity가 시작되고 사용자와 상호작용하기 직전에 호출

Activity Activity Stack 맨 위에 있으며, 사용자가 정보를 입력

X

onPause()

 

onPause()

Activity를 벗어날 때 가장 먼저 호출

변경사항 등 중요한 데이터를 커밋 하도록 구현

이 메서드가 반환될 때까지 다음 Activity가 재개되지 않음.

O

onResume()

onStop()

onStop()

Activity가 더 이상 사용자에게 표시되지 않게 되면 호출

O

onRestart()

onDestroy()

onDestroy()

Activity가 소멸되기 전에 호출

호출될 수 있는 경우

(* isFinishing() 메서드로 구분 가능)

1) Activity가 완료

(누군가가 여기에 finish()를 호출해서)

2) 시스템이 공간을 절약하기 위해

O

-

* 중단가능 : 시스템이 메서드가 리턴된 후 해당 액티비티 코드의 다른 줄을 실행하지 않고도 언제든 이 Activity를 호스팅하는 프로세스를 중단시킬 수 있는지 여부를 나타낸다.

 

- UI 구현 : Activity에 대한 UI는 뷰 계층- View 클래스에서 파생된 객체가 제공한다. 각 뷰는 Activity 창안에 특정한 직사각형 공간을 제어하며 사용자 상호작용에 대응할 수 있다.

- Manifest에서 Activity 선언 : 시스템에서 Activity에 엑세스 할 수 있게 하려면 Manifest 파일에서 선언해야 한다. <application>요소의 하위 항목에 <activity>요소를 추가한다.

<activity>요소엔 label, icon, theme 등의 특성을 추가할 수 있다.

<intent-filter> : 다른 애플리케이션 컴포넌트가 이를 활성화하는 방법을 선언하기 위해 사용한다. 다른 애플리케이션에서 사용할 수 없게 하고자 하는 Activity에는 인텐트 필터가 없어야 한다.

애플리케이션에서 전달된 암시적 인텐트에 응답하도록 하려면 Activity에 추가로 인텐트 필터를 정의해야 한다.

- 인텐트 유형

1) 명시적 인텐트 : 시작할 컴포넌트를 이름으로 지정(완전히 정규화된 클래스 이름)

2) 암시적 인텐트 : 수행할 일반적인 작업을 선언하여 다른 앱의 컴포넌트에서 이를 처리함. 해당 앱의 Manifest 파일에 선언된 <intent-filter>와 일치 여부 확인 후 인텐트 전달

- Activity 상태 저장 : onSaveInstanceState()를 재정의하여 Activity 상태에 대한 정보를 보존하도록함. (기본 구현이 UI 상태를 저장하는데 도움을 줌, super클래스 호출)

* onSaveInstaceState()의 호출이 보장되지 않기 때문에 영구데이터를 저장하려면 onPause()를 사용해야 함.

- Activity 조정 :

1) Activity A onPause() 메서드 실행

2) Activity B onCreate(), onStart(), onResume() 메서드가 순차적으로 실행

3) Activity A가 더 이상 화면에 표시되지 않는 경우 A onStop() 메서드 실행