위 Activity의 Lifecycle 그림은 대부분 알고 있으실 건데요. 하지만 두 Activity 간의 전환 사이에서 발생하는 Lifecycle 순서는
대부분 모르실겁니다. (어떤 면접관분께서는 실제 면접에서 질문했을 때 지금까지 맞춘 사람을 2명 보았다고 하네요.)
한번 맞춰보실까요??
Q1. 현재 A 엑티비티가 포그라운드 상태입니다. 이때 B 액티비티로 전환될 때, 발생하는 LifeCycle 콜백 함수들을 순서대로 나열해보세요.
A:onPause()
A:onStop()
B:onCreate()
B:onStart()
B:onResume()
위 순서로 푸셨다면 아쉽지만 정답자에 들어가지 못하셨습니다 ㅠ
정답
A:onPause()
B:onCreate()
B:onStart()
B:onResume()
A:onStop()
A 엑티비티의 onStop은 B 액티비티가 onResume 포그라운드로 동작이 될때 호출이 됩니다.
Q2. B 액티비티에서 finish() 함수를 호출하게 되면 발생하는 Lifecycle 순서는 어떻게 될까요??
B:onPause()
A:onRestart()
A:onStart()
A:onResume()
B:onStop()
B:onDestroy()
네! 이번에도 마찬가지로 B 엑티비티의 onPause()가 호출되고 A 액티비티가 포그라운드로 다시 동작한 이후에
B 엑티비티의 onStop과 onDestroy가 호출이 됩니다.
이제 여러분은 면접에서 정답을 맞힌 2분 중 한 분이 되실 겁니다. ㅎㅎ
추가로, up action 이라는 Android에서 Appbar에 Back버튼을 쉽게 다는 방법을 제공해줍니다.
방법으로는 manifest에 parentActivity를 명시하는 것이고
<activity android:name=".AddActivity"
android:parentActivityName=".MainActivity"></activity>
그러면 결과로
화살표 모양의 Back 버튼을 쉽게 구현할 수 있습니다. 해당 버튼을 누르게 되면 manifest에서 지정한 액티비티로 돌아가는 Q2와 같은 상황입니다. 하지만 이때 부모 엑티비티 모드를 지정하지 않으면 standard lunch mode가 실행이 되서 Lifecycle이 다르게 나옵니다.
B:onPause()
A:onDestroy()
A:onCreate()
A:onStart()
A:onResume()
B:onStop()
B:onDestroy()
Acitivity Stack에 존재하는 A가 restart 되는 것이 아닌, Destroy 된 후 새로 생성이 됩니다.
A 엑티비티에 mode를 single Top으로 지정하게 되면 Q2 정답과 같은 결과가 나오게 됩니다.
'Android > Common' 카테고리의 다른 글
[Android] 음성 인식 기능 추가하는 방법 정리 (0) | 2020.03.26 |
---|---|
[Android] AAC - View Binding (0) | 2020.03.12 |
[Android]Keybard Show/Hide 감지하기 (0) | 2020.02.12 |
[Android] RecyclerView의 최상단 최하단 감지하기 (0) | 2020.02.10 |
[Android] Retrofit 기본 사용법 (0) | 2020.02.09 |