[Android] Android Lifecycle과 action에 따른 콜백
Q) 액티비티에서 뒤로가기 버튼을 누르면?
A)
- Activity::onBackPressed() 콜백 함수가 호출된다.
Androidx에선 androidx.activity.OnBackPressedCallback 추상 클래스를 제공한다.
- OnBackPressedCallback::handleOnBackPressed() 메서드를 제공하고 있어서, 액티비티와의 의존성을 줄이고, Fragment에서 '뒤로 가기 버튼 로직'을 추가 할 수 있다.
- OnBackPressedDispatcher.addCallback(LifecycleOwner, OnBackPressedCallback)을 사용해서 Fragment를 등록할 수 있다.
Q) 액티비티에서 홈 버튼을 눌렀을 때, 콜백 함수?
A)
- 홈 버튼은 앱에서 특별히 제어 할 수 없다.
- 하지만, 사용자가 홈 키를 눌러 사용중인 앱이 Background로 넘어가는 경우 Activity::onUserLeaveHint() 함수가 호출된다.
- 앱을 사용중에 전화가 걸려올땐 호출 X
- 사용자가 선택적으로 액티비티가 백그라운드로 이동하는 경우에만 호출.
- onUserLeaveHint()는 onPause() 이전에 호출 된다.
Q) 현재 A 액티비티가 포그라운드 상태. 이 때 B액티비티로 전환 되면 발생하는 lifecycle Callback 함수를 나열해라.
A)
- A : onPause()
B : onCreate()
B : onStart()
B : onResume()
A : onStop()
Q) B 액티비티에서 finish() 함수를 호출하게 되면 발생하는 Lifecycle 순서?
A)
- B : onPause()
A : onRestart()
A : onStart()
A : onResume()
B : onStop()
B : onDestroy()
액티비티의 3가지 상태
- Active or Running 상태
- 액티비티가 전면에서 실행되고 있을 때
- 현재 Task에 대한 Activity Stack의 최상위에 존재할 때
- Pause 상태
- 다른 액티비티가 위에 존재 하지만 그 액티비티가 투명상태 혹은 전체 화면을 채우지 못해 아직은 이전 액티비티가 보이는 상태
- dialog가 띄워지면 그렇겠지?
- Stop 상태
- 다른 Activity에 의해 완전히 가려져 더 이상 사용자에게 보여지지 않을 때
Launch Mode 4가지 ?
-
standard(default)
- 인텐트 할 때마다 Activity를 새로 생성
-
singleTop
- Intent 때마다 새로 생성하나, 동일한 Activity가 해당 테스크의 top에 있을 경우 새로 생성 하지 않고 기존에 있던 Activity 호출
- 생명 주기는 onPause() -> onNewIntent() -> onResume()
-
singleTask
- 하나의 Activity만 생성 되나, 다른 Activity가 해당 태스크의 일부가 되는 것을 허용한다.
-
singleInstance
- 이 옵션도 singleTask와 비슷하나 그 어떤 Activity와도 섞이지 않고 유일한 Activity로 동작
- task 안에 activity가 하나만 존재