1) 액티비티(Activity)
액티비티는 화면을 구성하는 가장 기본적인 컴포넌트로 안드로이드폰에 나타나는 화면 하나하나를 말한다. 액티비티는 사용자에게 보여주는 화면을 만들기 때문에 안드로이드의 4대 컴포넌트 중 가장 핵심적인 요소이다. 실제 모바일 앱을 사용해보았다면 버튼을 클릭하는 등의 사용자의 이벤트에 따라 화면이 이동되기도 한다.
이처럼 모바일 앱 환경은 사용자와 앱의 상호작용이 항상 동일한 위치에서 시작되는 것이 아니라는 점에서 데스크톱 앱 환경과 차이점을 지닌다. 대신 사용자의 행동이 흔히 비결정론적으로 시작된다. 예를 들어 홈 화면에서 이메일 앱을 열면 이메일 목록이 표시될 수 있고, 반대로 소셜 미디어 앱을 사용하고 있는 상태에서 이메일 앱을 실행하면 이메일을 작성하기 위한 이메일 앱 화면으로 바로 이동될 수 있다.
Activity 클래스는 이 패러다임을 촉진하도록 설계되었다. 한 앱이 다른 앱을 호출할 때 호출 앱은 다른 앱을 전체적으로 호출하는 것이 아니라 다른 앱의 액티비티를 호출한다. 이런 방식으로 액티비티는 앱과 사용자의 상호작용을 위한 진입적 역할을 한다. 액티비티는 Activity 클래스의 서브클래스로 구현된다. 액티비티 앱이 UI를 그리는 창을 제공하고, 일반적으로 화면을 채우지만 화면보다 작고 다른 창 위에 떠 있는 경우도 있다. 일반적으로 한 액티비티는 앱에서 하나의 화면을 구현한다. 예를 들면 앱의 액티비티 중 하나는 환경설정 화면을 구현하고 또 다른 액티비티는 사진 선택 화면을 구현할 수 있다. 대부분의 앱에는 여러 화면이 포함되어있다. 이러한 여러 개의 화면을 보여주기 위해서 앱의 manifest에 액티비티에 관련 정보를 등록하고 생명 주기를 적절히 관리해야 한다.
위의 사진처럼 현재 버전의 안드로이드 스튜디오를 사용했을 때 새로운 액티비티를 만들게 되면 자동으로 manifest에 등록이 될 것이다. 만약, 내가 첫 번째로 보여주고 싶은 화면이 있다면 그 액티비티 안에 intent-filter를 추가해주고 exported에 false라고 입력되어 있던 것을 true로 바꾸어 주어야 한다.
액티비티는 사용자가 할 수 있는 집중된 단일 작업이다. 모바일 앱의 액티비티들은 거의 Activity 클래스 또는 Activity 클래스의 서브클래스인 다른 클래스(AppCompatActivity 또는 FragmentActivity) 중 하나의 서브 클래스로 생성된다.
액티비티 클래스와 서브 클래스들은 안드로이드 런타임이 자동으로 호출하는 메서드를 많이 갖고 있다. 액티비티의 상태가 변경된다는 것을 그 액티비티에 알려주기 위해서인데, 이런 메서드들을 액티비티 생명주기 메서드라고 한다.
2) 생명주기(LifeCycle)
안드로이드 앱은 위와 같은 생명주기를 가지고 있다. 액티비티의 생명주기는 액티비티의 생성부터 소멸까지의 주기를 말한다.
- 응용프로그램이 시작되면 onCreate(), onStart(), onResume() 메서드가 수행되고 메인 액티비티 화면이 나온다. 이것이 메인 액티비티의 실행 상태이다.
- 이 상태에서 메인 액티비티를 끝내면 onPause(), onStop(), onDestroy() 메서드가 차례로 수행되고 응용 프로그램이 종료된다.
- 만약 다른 액티비티를 요청하면 onPause(0, onStop() 메서드가 수행되고 메인 액티비티가 중지되며 다른 액티비티 화면이 나온다.
- 또 다른 액티비티의 사용을 종료하면 onRestart(), onStart(), onResume() 메서드가 수행되고 다시 메인 액티비티 화면이 나온다.
만약 화면 설계를 액티비티를 활용하여 설계했다면, 위와 같은 생명주기에 필요한 메서드를 작성하여 코드를 작성하면 된다. 하지만 프래그먼트를 활용하여 앱을 만든다면, 프래그먼트의 생명주기에 맞게 코드를 작성해주어야 한다.