Android

안드로이드 4대 컴포넌트 중 Activity란?

DevGoni 2021. 2. 5. 11:36
728x90

2021/02/05 - [Android/개념] - 안드로이드 4대 컴포넌트

 

안드로이드 4대 컴포넌트

애플리케이션을 작성하는 데 필수적인 개념들은 무엇이 있을까요? 지금부터 알아보겠습니다. ​ 안드로이드 앱은 컴포넌트(Component)들로 구성된다는 점입니다. 즉 APP = Component + Component ···· 인

goni95.tistory.com

Activity(액티비티)란?

액티비티는 UI 화면을 관리하는 컴포넌트 입니다. 액티비티에서 UI를 표시하기 위해 View 또는 ViewGroup 등을 조합하여 배치합니다.

 

애플리케이션은 하나 이상의 액티비티가 서로 묶여 있는 형태로 구성되는데, 새로운 액티비티가 시작되면 이전의 액비티비티는 중단되게 됩니다. 액티비티가 중단되었다고 하더라도 시스템은 액티비티를 Back Stack에 보존하게되고 새로운 액티비티가 시작되면 이전 액티비티는 Back Stack으로 Push되고 새로운 액티비티가 가장 위 쪽에 위치하게 됩니다.

Stack의 특성상 LIFE 방식이니, 현재 표시되고 있는 액티비티를 끝내게되면 pop(꺼내는 연산)되고 Stack 상에서 지워지고 이전의 액티비티가 표시됩니다.

 

Activity Class란?

이전 포스트에서 언급했듯이 액티비티 역할을 하기 위해서 Activity Class를 상속받는데,  Activity Class에는 Activity, FragmentActivity, AppCompatActivity가 있습니다.

 

Activity 클래스 : 안드로이드 버전의 기본 라이브러리 액티비티 클래스로, 다른 액티비티 클래스는 이 클래스의 서브 클래스가 됩니다.

 

FragmetActivity 클래스 : 과거 버전과 호환성을 유지하며, 프래그먼트를 사용할 때 필요한 액티비티 클래스 입니다.

 

AppCompatActivity 클래스 : 과거 버전과 호환성을 유지하며, 새로운 버전 기능도 사용할 수 있도록 하는 액티비티 클래스 입니다. 

안드로이드 스튜디오 1.5 버전부터 프로젝트 생성 시 액티비티를 AppCompatActivity 클래스의 서브 클래스로 생성해줍니다. 

 

생명주기 메서드

onCreate(Bundle saveInstanceState) : 액티비티 인스턴스가 최소로 생성될 경우 호출되는데, 대부분의 초기화 작업을 이 메서드에서 수행합니다. 매개변수로 들어온 Bundle 객체는 동적인 상태 정보를 포함할 수 있습니다. 동적 상태 정보인 OnSaveInstanceState()에서 저장된 내용과 동일한 Bundle을 넘겨주는데, UI의 상태와 관련된 데이터 입니다.

 

onStart() : onCreate(), onRestart() 메서드가 호출되고 바로 호출되게 됩니다. UI가 사용자에게 표시될 것을 액티비티에 알립니다. 액티비티가 액티비티 스택의 맨 위(현재 화면에 보이는 액티비티)로 이동하게 되면 이 메서드가 호출된 후 onResume()이 호출됩니다.

 

onResume() : 액티비티 스택의 맨 위에 있으며, 사용자가 현재 상호동작하는 (실행 중인)액티비티임을 알려준다.

 

onPause() : 현재 액티비티가 focus를 잃게되면 호출되는데, 액티비티가 투명상태거나 등의 완전히 가려지지 않은 상태라면 이 메서드가 호출되게 되비다. 이 메서드 내부에선 콘텐트 제공자, 데이터베이스 등의 데이터를 저장하는 작업과 CPU를 많이 사용하는 작업들을 처리해야 합니다.

 

onStop() : 액티비티가 더 이상 사용자에게 보이지않는 경우 이 메서드가 호출되게 됩니다. 해당 메서드가 호출된 후 onRestart(), onDestroy()가 호출되는데, 액티비티가 다시 표시되면 onRestart()가 호출되고, 액티비티가 완전히 종료되면 onDestroy()가 호출됩니다.

 

onDestroy() : 액티비티가 종료될 때, 즉 소멸될 시 해당 메서드를 호출하게 됩니다. 액티비티가 작업을 마치고 finish() 메서드를 호출한 경우 또는 정상적인 종료인 경우엔 onDestroy() 메서드가 호출되지만, 오류로 인한 강제종료인 경우엔 호출되지 않을 수 있습니다.

 

 

액티비티 특징

액티비티의 크기는 상대바(Status Bar) 영역을 제외한 화면 전체로 고정(원하는 위치에 원하는 크기로 변경할 수 없습니다.)

두 개의 액티비티를 동시에 보여줄 수 없습니다.

다른 애플리케이션의 액티비티를 불러낼 수 있습니다.

액티비티 내에는 프래그먼트(Fragment)를 추가하여 화면을 분할하여 별도로 조작할 수 있습니다.

 

Tip

액티비티가 기본적으로 가지고 있는 생명주기 메소드를 재정의해서 원하는 기능을 구현해야합니다.

onCreate() 메서드에서 setContentView() 메서드를 호출하고 있는데, setContentView() 메서드는 주어진 R.layout.main을 가지고 화면을 구성합니다.

R.layout.main은 실제로 /res/layout/main.xml을 가리키는 것이며, R 클래스(R.java) 내에 작성되어 있는 정적 클래스(static class)의 정적 변수(static variable)를 가리킵니다.

R 클래스는 안드로이드 빌드 시스템에 의해 자동으로 생성되는 자바 클래스이고, 이 클래스는 리소스를 효율적으로 접근할 수 있도록 리소스를 int 값으로 관리합니다.