[Android 입문] 액티비티 생명주기 (Activity Lifecycle)
반응형

 

 

 

 

 

액티비티 생명주기

 

 

 

 

액티비티의 수명

  • - onCreate() 호출 ~ onDestroy() 호출 사이
  • onCreate() : 액티비티가 생성되어 레이아웃 설정 등을 수행
  • onDestroy() : 호출되는 시점에 사용하고 있는 리소스를 모두 해제하고 생을 마감

 

 

액티비티의 화면이 눈에 보이게 되는 Visibility

  • onStart()호출 ~ onStop() 호출 사이
  • 이 기간중에는 사용자가 액티비티를 화면에서 보고 이와 상호 작용 할 수 있음
  • onStop()이 호출되어 새 액티비티가 시작되면, 기존 액티비티는 더 이상 표시되지 않음
  • 시스템은 액티비티의 전체 수명 내내 onStart() 및 onStop()을 여러 번 호출 할 수 있음
    이 때 액티비티는 사용자에게 표시되었다 숨겨지는 상태를 오가게 됨

 

 

액티비티가 foreground에서 동작하는 구간

  • - onResume() 호출 ~ onPause() 호출 사이
  • 이 기간 중에는 이 액티비티가 화면에서 다른 모든 액티비티 앞에 표시 ( 사용자 입력도 여기에 집중)
  • 액티비티는 전경에 나타났다 숨겨지는 전환을 자주 반복할 수 있음
  • 예를 들어, 기기가 절전모드에 들어가거나 대화상자가 나타나면 onPause()가 호출

 

 

수명주기 콜백 메소드 (Lifecycle Callback Method)

  • 액티비티가 생성되면서 해제될 때까지 액티비티의 상태에 따라서 불려지는 메소드
  • 애플리케이션 개발자는 필요한 경우에 해당 콜백 메소드를 재 정의하여 필요한 일을 수행하게 할 수 있음
  • 주요 콜백 메소드
    - onCreate() : 반드시 구현해야 하는 메소드로서 액티비티가 생성되며 호출됨
      가장 중요한 작업은 화면을 setContentView()로 설정하는 것
    - onPause() : 사용자가 액티비티를 떠나고 있을 때 호출됨
      액티비티가 완전히 소멸된 것은 아니지만, 사용자가 돌아오지 않을 수도 있어서 그 동안의 변경사항을 저장

 

 

 

6). 액티비티 전환 시 수명주기 콜백 메소드 호출 순서

 

FirstActivity에서 SecondActivity 시작

  1. FirstActivity의 onPause()
  2. SecondActivity의 onCreate() -> onStart() -> onResume()
  3. FirstActivity의 onStop()

 

단말기의 뒤로가기 버튼 누름

  1. SecondActivity의 onPause()
  2. FirstActivity의 onRestart() -> onStart() -> onResume()
  3. SecondActivity의 onStop() -> onDestroy()

 

 

 

 

 

(실습) Activity Lifecycle 콜백 메소드 호출 순서 살펴보기 

 

더보기

 

 

  1. 수명주기 콜백 메소드를 생성하고자 하는 클래스(예:FirstActivity)의 소스코드를 연다.
  2. 메소드를 생성하고자 하는 소스코드의 위치에 커서를 위치 시킨 뒤, 우클릭으로 Generate메뉴를 실행한다.
  3. Override Methods.. 메뉴를 선택 후, 생성하고자 하는 메소드를 선택 한 뒤 OK를 클릭한다.
  4. 콜백 메소드 안에 로그를 출력하는 코드를 생성한다.
    Log.i("tag string", "log message");
  5. FirstActivity에서 버튼을 눌러서 SecondActivity로 이동한 후 백(Back)버튼을 누르고 로그창 확인
    (필터로 TAG의 Lifecycle을 입력하면, 필터에 입력된 로그만 표시됨)

 

두 개의 액티비티를 만들어 실행한 뒤 로그로 비교하면
onStart()~onDestroy() 두 액티비티 간의 실행 흐름을 볼 수 있음

 

class FirstActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_first)
        Log.i(TAG, “onCreate()")
        
        //생략..

    }

    val TAG = "FirstActivity_Lifrcycle"

    override fun onStart() {
        super.onStart()
        Log.i(TAG, "onStart()")
    }

    override fun onResume() {
        super.onResume()
        Log.i(TAG, "onResume()")
    }

    override fun onPause() {
        super.onPause()
        Log.i(TAG, "onPause()")
    }

    override fun onStop() {
        super.onStop()
        Log.i(TAG, "onStop()")
    }

    override fun onRestart() {
        super.onRestart()
        Log.i(TAG, "onRestart()")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.i(TAG, "onDestroy()")
    }
}

 

 

class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        Log.i(TAG, "onCreate()")
      
        // 생략..
    }

    val TAG = "SecondActivity_Lifrcycle"

    override fun onStart() {
        super.onStart()
        Log.i(TAG, "onStart()")
    }

    override fun onResume() {
        super.onResume()
        Log.i(TAG, "onResume()")
    }

    override fun onPause() {
        super.onPause()
        Log.i(TAG, "onPause()")
    }

    override fun onStop() {
        super.onStop()
        Log.i(TAG, "onStop()")
    }

    override fun onRestart() {
        super.onRestart()
        Log.i(TAG, "onRestart()")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.i(TAG, "onDestroy()")
    }

}

 

 

🔗 안드로이드 개발자 공식문서에서의 액티비티 생명주기 (바로가기 링크)

 

 

 

 

 

반응형
 💬 C O M M E N T