안드로이드 학습 - Activity

cherrylime69·2022년 3월 30일
0

안드로이드

목록 보기
2/6

📚 Activity

👀 Activity란?

  • Android앱을만드는주요component중하나입니다.
  • 액티비티는 사용자와 상호작용하기 위한 진입점입니다.
  • 상호작용이란 터치, 클릭 등 이벤트 발생 및 처리와 팝업창을 띄우는 등 종합적인 커뮤니케이션을 일컫습니다.
  • 다시말해 액티비티는 UI를 포함하여 사용자와 상호작용할 수 있는 화면입니다.
  • UI를 구성하는 것 = 레이아웃을 띄우는 것 = 레이아웃 ID를 인자로 써서 Layout.inflate 하는 것 = View hierarchy 정보를 받아 실제로 View(위젯)를 인스턴스화하는 것
  • main() 메서드를 사용하여 앱을 실행하는 프로그래밍 패러다임과 달리 Android 시스템은 수명 주기의 특정 단계에 해당하는 특정 콜백 메서드를 호출하여 앱을 실행합니다.
  • 모바일 앱 환경에 따르면 앱은 항상 동일한 Activity(예를 들면 MainActivity)에서 시작되는 것이 아니다.
    • 사용자와 앱의 상호작용에 따라 앱이 시작되는 Activity가 다를 수 있고, Activity 외의 다른 컴포넌트를 통해 앱이 시작될 수도 있다.
    • 예를 들어 이메일 앱일 경우, 홈 화면에서 앱을 실행시키면 이메일 목록을 보여주는 Activity가 먼저 시작되지만 SNS 앱을 사용하고 있는 상태에서 이메일을 작성하기 위해 SNS 앱에서 이메일 앱을 열면 이메일 작성 Activity가 먼저 시작되도록 할 수 있다.

👀 Activity 선언

  • 새로운 Activity를 생성했다면 이를 manifest에 선언을 해야만 사용할 수 있습니다.
  • 새로운 Activity를 선언하려면 manifest 파일을 열고 요소를 요소의 하위 요소로 추가해야 합니다. 예를 들면 다음과 같습니다.
 
      <manifest ... >
      <application ... >
          <activity android:name=".ExampleActivity" />
          ...
      </application ... >
      ...
    </manifest >

👀 Activity LifeCycle

👉 Activity LifeCycle 이란?

  • 앞서 설명했듯이 Activity는 lifecycle을 가지고 있으며, Android 시스템은 수명 주기(라이프사이클)의 특정 단계에 해당하는 특정 콜백 메서드를 호출하여 앱을 실행합니다.
  • 만약 앱을 실행하는 중에 전화를 받게 되면 앱은 어떻게 될까요? 앱이 종료될까요? 또는 앱을 이용하다가 홈화면을 누른 후 다른 앱을 실행하고 다시 원래의 앱으로 되돌아오면 어떻게 될까요?
  • 위에서 말한 예시처럼 앱을 이용하면서 Activity의 상태는 자주 변하며, 상태 변화에 따른 콜백 메서드가 호출됩니다. 이 콜백 메서드를 활용하여 상태에 적합한 작업을 수행할 수 있습니다.

👉 Activity LifeCycle 종류

  • 앱이 실행되면 onCreate() - onStart() - onResume() 순으로 빠르게 실행됩니다.
  • onCreate() - onDestroy(), onStart() - onStop(), onResume() - onPause() 는 각각 대응됩니다.

👉 onCreate() : UI 준비

  • 앱이 처음 실행되면 호출됩니다.
  • 앱을 실행하면 한번만 호출되기 때문에 무거운 작업이나 한번만 작업해도 되는 작업을 여기서 수행한다.
  • 주로 처리하는 작업
    • Widget을 inflate해 View객체로 생성한후 화면에 보여준다
    • 사용자와의 상호작용을 처리하기위해 Widget에 listener(이벤트응답처리객체)를 설정한다.
    • 외부의 모델데이터를 연결한다.

👉 onStart() : UI 변경 시작

  • 다중창모드에서 앱이 선택되는경우
  • 주로 처리하는 작업
    • 애니메이션 작업
    • 데이터 갱신과 관련된 작업

👉 onResume() : 현재 상호 작용하는 Activity

  • 앱이 foreground에 표시되는 단계
  • 사용자가 focus를 얻어 앱과 본격적으로 상호 작용할 수 있는 단계
  • 어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 앱이 이 상태에 머무릅니다.
  • 오버뷰화면에서 Activity를 선택하는 경우
  • 하나의 Activity만 Resumed 상태일 수 있다
  • 앱을 이용하면서 자주 호출되므로 가벼운 작업은 여기서 수행한다

👉 onPause() : focus를 잃음

  • Activity가 focus를 잃게 되면 이 상태로 전환됩니다.
  • 대표적으로 onResume()를 통해 특정 이벤트가(ex.카메라 미리보기 등) 실행되어 focus를 잃으면 이 상태로 전환됩니다.
  • 또는 사용자가 다중창모드를 시작해서 다른앱을 사용 중인 경우에도 이 상태로 전환됩니다.

👉 onStop() : UI 변경 중단

  • 홈버튼을 눌러 다른앱을 사용할때
  • onStop 호출 이후에 Activity는 종료시킬 대상이 됩니다.
  • 이 메서드에서는 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야 합니다.
  • 주로 처리하는 작업
    • 애니메이션, 데이터 갱신 중단, 데이터 저장

👉 onDestroy() : Activity 소멸

  • back버튼을 탭해서 앱을 종료시킬때
  • 오버뷰화면에서 해당 앱을 목록에서 제거할때
  • finsh()가 호출되어 앱이 종료될 때
  • 주로 처리하는 작업
    • 이전에 해제되지 않은 모든 리소스를 해제합니다

👉 다른 Activity로 이동할 때, 현재 Activity 상태는?

  • 다른 액티비티(액티비티 B)로 이동할 때 현재 액티비티(액티비티 A)와 액티비티 B에서 호출되는 콜백 메서드는 다음과 같다
    • onPause()(A) - onCreate()(B) - onStart()(B) - onResume()(B) - onStop()(A)
  • 액티비티 A가 완전히 종료된 다음에 액티비티 B가 생성되는 것이 아니라 생성과 종료가 겹쳐지는 점을 이해해야 합니다. 이는 액티비티 A에서 사용한 데이터가 액티비티 B에서 공유 및 사용될 수 있어 데이터 사용을 원활하게 하기 위해 생성과 종료 과정이 겹치는 것 같습니다.

👀 Activity에서 화면 이동 관리

  • 액티비티는 어떻게 화면 이동을 관리하는 것일까요? 정답은 BackStack 입니다.
  • Stack은 Last in First out 형태를 가진 자료 구조입니다.
  • 위 그림에서 보시다시피, 새로운 액티비티가 차곡차곡 쌓이고, 뒤로 가기 버튼을 누르면 마지막 액티비티가 소멸되면서 이전 화면(이전 액티비티)가 다시 시작됩니다.
    • 앱이 실행되면,‘Activity1’이 stack에 추가됩니다.
    • 두번째 ‘Activity2’가 실행되면,‘Activity2’가 ‘Activity1’ 위로 쌓입니다.(push)
    • 사용자가 back버튼을 탭하여 ‘Activity3’가 소멸되면, stack에서 pop되고 이전의 ‘Activity2’가 위로 올라옵니다.

👀 참고 사이트

  1. 공식 문서
  1. 블로그
profile
개발자 일기

0개의 댓글