Android - 액티비티 생명 주기

2024. 6. 20. 17:09Android 앱 개발

# 액티비티 생명 주기의 개념

 

# 액티비티의 수명

- onCreate()와 onDestroy() 사이에 존재

- onCreate(): 액티비티가 생성되어 레이아웃 설정 등을 수행

- onDestroy(): 호출되는 시점에 사용하고 있는 리소스를 모두 해제하고 마감

 

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

- onStart()와 onStop() 사이에 존재

- 유저가 액티비티를 화면에서 보고 상호작용이 가능

- onStop()이 호출되어 새 액티비티가 시작되면 기존의 액티비티는 Stop

- 시스템은 액티비티의 전체 수명 내내 onStop()과 onStart()를 여러 번 호출 가능

- 이때 액티비티는 유저에게 보였다가 숨겨짐을 반복

 

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

- onResume()과 onPause() 사이에도 동작

- 액티비티가 화면에서 다른 모든 액티비티 앞에 표시됨

- 사용자 입력도 이곳에 집중

- 전경에 나타났다가 숨겨지는 전환 반복 가능

- ex) 기기가 절전모드에 들어가거나 대화 상자가 나타나면 onPause()가 호출

 

# 수명주기 콜백 메소드

- 라이프 사이클 콜백 메소드: 액티비티가 생성되면서 해체될 때까지 액티비티의 상태에 따라서 불려지는 메소드

- 개발자는 필요한 경우에 해당 콜백 메소드를 재정의해 필요한 일을 수행 가능

- 주요 콜백 메소드

  1) onCreate()

    - 반드시 구현해야 하는 메소드로, 액티비티가 생성되며 호툴

    - 화면을 setContentView()를 호출해 설정해야

  2) onPause()

    - 사용자가 액티비티를 떠나고 있을 때 호출됨

    - 액티비티가 완전히 소멸되진 않지만 사용자가 돌아오지 않을 수 있기 때문에 그간의 변경사항을 저장함

 

# 액티비티 전환 시 콜백 메소드 호출 순서

<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()

 

예시

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()")
    }

}

'Android 앱 개발' 카테고리의 다른 글

Android - 인텐트(Intent)  (0) 2024.06.20
Android - 액티비티(Activity)  (0) 2024.06.20
Android - Layout  (0) 2024.06.19
Android UI - View & Widget  (0) 2024.06.19
Android 앱 개발 입문 - Android Studio  (0) 2024.06.18