안드로이드 With Java #9 Activity

Jake Seo·2020년 8월 4일
1

안드로이드 With Java

목록 보기
9/31

안드로이드 With Java #9 Activity

Activity란?

앱의 한 화면임. 앱은 화면들의 조합으로 구성되어 있음.

  • 어플리케이션 구성요소
  • 어플리케이션은 여러개의 Activity로 구성
  • Activity는 또 다른 Activity를 시작 가능
  • 새로운 Activity가 시작되면 이전 Activity는 중단 상태로 스택에 보존됨

안드로이드 라이프사이클

  • Activity가 표기되고 사라질 때까지의 과정

라이프사이클의 구분 단위

  • 전체 수명 : onCreate()onDestroy()의 사이
    • onCreate()에서 설정을 수행한 다음 나머지 리소스를 모두 onDestroy()에서 해재 해주어야 한다.
  • 가시적 수명 : onStart()onStop()의 사이
    • 사용자가 Activity와 상호작용 할 수 있는 시기
  • 전경 수명 : onResume()onPause() 사이
    • 현재 Activity가 다른 Activity 앞에 표시 되고, 사용자 입력도 집중된다.

가시적 수명과 전경 수명과의 차이가 있는데, 가시적 수명은 앱에 보이기만 하면 되는 상태이다. 전경수명은 보이기만 해서는 안되고 전부가 보여야 한다.

다른 액티비티가 위에 떠있는 상태는 가시적 수명에 있는 것은 맞지만 전경 수명은 아니다.

onCreate()

  • 액티비티가 처음 생성되었을 때 호출
  • 정적 설정을 모두 수행하여야 한다
    • 정적 설정이란 Activity가 켜졌을 때 한번설정하면 다음부터는 변할일 없는 설정을 말함
  • 뒤에 항상 onStart()가 호출
  • setContentView()를 이곳에서 호출해야 Activity의 사용자 인터페이스 레이아웃을 정의할 수 있다.
    • setContentView()에게 정의해놓은 xml파일을 전달하여 이 함수가 사용자 눈에 보여지는 레이아웃을 그리기 시작함

onStart()

  • Activity가 사용자에게 화면을 보여줄 준비가 되었을 때 호출

onResume()

  • Activity가 시작되고 사용자와 상호작용하기 직전에 호출
  • 사용자에게 input을 받을 준비가 된 상태

Activity Running

  • Activity가 사용자에게 화면을 보여줄 준비도 되어있고 input을 받을 준비도 된 상태
  • 일반적으로 앱을 실행하면 항상 보고 있는 화면

onPause()

  • 화면이 일부 가려진 상태
  • 시스템이 다른 Activity를 재개하기 직전에 호출
  • 데이터를 유지하기 위해 저장되지 않은 정보를 저장하는 용도로 많이 사용
  • 이 메소드가 반환될 때까지 다음 Activity가 실행되지 않기 때문에 빠르게 종료시켜야 한다.
  • 화면이 다시 보여지면 onResume()이 따라오고 사라지면 onStop()이 따라온다.

onStop()

  • Activity가 사용자에게 더이상 보여지지 않는 상태
  • 사용자에게 다시 보여지면 onRestart()가 뒤따라오고 사라지면 onDestroy()가 따라온다.

onDestroy()

  • Activity가 소멸되기 직전에 호출
  • Activity의 마지막 라이프 사이클
  • 의도적으로 종료 됐을 수 있고, 시스템 resource를 절약하기 위해 종료되었을 수도 있다.

Activity 상태 저장

  1. onSaveInstanceState() 를 구현하여 Activity 상태에 관한 중요한 정보를 보존할 수 있음
  2. Bundle로 저장이 됨
  3. onCreate()onRestoreInstanceState()에 전달이 됨
  4. 이전 상태가 복구가 됨

이러한 과정들을 거쳐서 Activity에 다시 돌아와도 이전 상태를 복구할 수 있음

실습

모든 라이프사이클을 오버라이드하여 Log.d() 메소드를 넣고 Log.d("LifeCycle", "메소드명()");을 작성하여 로그를 찍게 해두었다.

앱을 그냥 켰을 때

그냥 Run을 하였을 때 표기된 로그는 다음과 같다.

정직하게 배웠던 라이프사이클이 표기되고 있다.

멀티태스킹 버튼을 눌렀을 때

소위 말하는 멀티태스킹 버튼(맨 오른쪽 네모 버튼)을 누르면 onPause()onStop()이 추가로 로그에 찍힌다.

멀티태스킹 버튼에서 다시 돌아갔을 때

onRestart() > onStart() > onResume() 순으로 라이프사이클을 다시 수행한다.

뒤로 가기 버튼을 눌러 앱을 종료했을 때

onPause() > onStop() > onDestroy() 순으로 라이프사이클이 수행되며 종료된다.

Activity 상태 저장

인자로 Bundle 형태의 outState를 받음

  • onSaveInstanceState() 메소드를 오버라이드하여 저장하고 싶은 부분을 저장할 수 있음
  • 적어준 것은 Bundle로 기억이 됨
  • Bundle은 onCreate()onRestoreInstanceState()로 들어감
  • 코드를 잘 살펴보면 super를 이용하여 bundle을 전해주는 모습을 볼 수 있음

인자로 Bundle을 받고 super에서 onCreate()에 Bundle을 전해줌

인자로 Bundle을 받고 super에서 onRestoreInstanceState()에 Bundle을 전해줌

의도적으로 Bundle에 어떤 값을 넣어서 상태가 회복이 되었을 때 원하는 행동을 하도록 커스터마이징 가능

profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글