2024. 3. 21. 16:34, 카테고리 없음
반응형
액티비티 생명주기
액티비티의 수명
- - onCreate() 호출 ~ onDestroy() 호출 사이
- onCreate() : 액티비티가 생성되어 레이아웃 설정 등을 수행
- onDestroy() : 호출되는 시점에 사용하고 있는 리소스를 모두 해제하고 생을 마감
액티비티의 화면이 눈에 보이게 되는 Visibility
- onStart()호출 ~ onStop() 호출 사이
- 이 기간중에는 사용자가 액티비티를 화면에서 보고 이와 상호 작용 할 수 있음
- onStop()이 호출되어 새 액티비티가 시작되면, 기존 액티비티는 더 이상 표시되지 않음
- 시스템은 액티비티의 전체 수명 내내 onStart() 및 onStop()을 여러 번 호출 할 수 있음
이 때 액티비티는 사용자에게 표시되었다 숨겨지는 상태를 오가게 됨
액티비티가 foreground에서 동작하는 구간
- - onResume() 호출 ~ onPause() 호출 사이
- 이 기간 중에는 이 액티비티가 화면에서 다른 모든 액티비티 앞에 표시 ( 사용자 입력도 여기에 집중)
- 액티비티는 전경에 나타났다 숨겨지는 전환을 자주 반복할 수 있음
- 예를 들어, 기기가 절전모드에 들어가거나 대화상자가 나타나면 onPause()가 호출
수명주기 콜백 메소드 (Lifecycle Callback Method)
- 액티비티가 생성되면서 해제될 때까지 액티비티의 상태에 따라서 불려지는 메소드
- 애플리케이션 개발자는 필요한 경우에 해당 콜백 메소드를 재 정의하여 필요한 일을 수행하게 할 수 있음
- 주요 콜백 메소드
- onCreate() : 반드시 구현해야 하는 메소드로서 액티비티가 생성되며 호출됨
가장 중요한 작업은 화면을 setContentView()로 설정하는 것
- onPause() : 사용자가 액티비티를 떠나고 있을 때 호출됨
액티비티가 완전히 소멸된 것은 아니지만, 사용자가 돌아오지 않을 수도 있어서 그 동안의 변경사항을 저장
6). 액티비티 전환 시 수명주기 콜백 메소드 호출 순서
FirstActivity에서 SecondActivity 시작
- FirstActivity의 onPause()
- SecondActivity의 onCreate() -> onStart() -> onResume()
- FirstActivity의 onStop()
단말기의 뒤로가기 버튼 누름
- SecondActivity의 onPause()
- FirstActivity의 onRestart() -> onStart() -> onResume()
- SecondActivity의 onStop() -> onDestroy()
(실습) Activity Lifecycle 콜백 메소드 호출 순서 살펴보기
더보기
- 수명주기 콜백 메소드를 생성하고자 하는 클래스(예:FirstActivity)의 소스코드를 연다.
- 메소드를 생성하고자 하는 소스코드의 위치에 커서를 위치 시킨 뒤, 우클릭으로 Generate메뉴를 실행한다.
- Override Methods.. 메뉴를 선택 후, 생성하고자 하는 메소드를 선택 한 뒤 OK를 클릭한다.
- 콜백 메소드 안에 로그를 출력하는 코드를 생성한다.
Log.i("tag string", "log message"); - 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