나는 안드로이드 라이프사이클을 글로 배웠어요~

JoJo Develog·2020년 3월 6일
8

Android

목록 보기
3/19

사건의 발단

안드로이드OS에서는 액티비티 라이프사이클이 정말정말 중요합니다.
액티비티 자체를 많이 다루기 때문입니다.
지난 라이프사이클 관련 글에서도 중요하다고 했기 때문에 이번엔 흔히들 실수하거나 몰랐던 부분에 대해서 짚어보려고 합니다.

요근래 이직 면접 경험에 빗대어서 알려드리자면 안드로이드 생명주기는 면접때 참여한 개발자 분들이 해당 주제로 많이 질문들을 하셨습니다.
10곳을 면접 봤다고 치면 6곳 정도가 생명주기 질문을 했습니다만... 그중에 열에 아홉은 오히려 잘못 알고 계셨고 제가 다시 알려주는 와중에 노트북을 가져와서 실행시켜서 로그까지 찍어보는 진풍경이 펼쳐지기도 한 곳도 있었습니다...

엥? 뭔데 그러지?🤔🤔🤔





해당 질문 내용이 무엇인고 하니,

1.메인 액티비티(상위)에서 디테일 액티비티(하위)를 호출했을때 라이프사이클(생명주기)가 호출되는 순서를 말씀해주시거나 종이에 서술해주세요.
2.이번엔 반대로 디테일 액티비티(하위)에서 메인 액티비티(하위)로 다시 돌아갈때 디테일 액티비티 종료 후 라이프사이클(생명주기)가 호출되는 순서를 말씀해주시거나 종이에 서술해주세요.
3.어떠한 상황에서 이러한 기능을 어느 생명주기 메소드에 구현하면 좋겠는지 그 이유를 포함여 말씀해주시거나 종이에 서술해주세요.

보통 대개 맥락이 같은 위의 질문들을 많이 했습니다.

하지만 이번 글의 내용인 1,2번의 질문들의 대한 답을 대개 잘못 알고 계시는 경우가 많았습니다.

1번 질문의 답

자! 그럼 1번부터 시작 합니다.
대부분의 면접때 제가 질문에 답한 내용에 "어?" 하시면서 이게 맞지 않냐고 면접관분들이 이야기 하시는데 그 순서는 아래와 같습니다.

  • 유형 1 (오답)
    <메인 액티비티>onPause()
    <메인 액티비티>onStop()
    <디테일 액티비티>onCreate()
    <디테일 액티비티>onStart()
    <디테일 액티비티>onResume()

  • 유형 2 (오답)
    <메인 액티비티>onPause()
    <메인 액티비티>onStop()
    <디테일 액티비티>onCreate()
    <디테일 액티비티>onStart()
    <디테일 액티비티>onPause()
    <메인 액티비티>onPause()

네.... 대개 유형1로 대답을 하시고 면접시 제일 기억에 남는 1곳이 유형2로 답하셨습니다.(쿨럭...)

하지만 실제로 안드로이드 스튜디오에서 코드를 돌려보면 저게 맞을까요?

다음은 실제로 돌려본 샘플 코드 로그 결과 입니다.

(정답)




생각했던거와는 달리 상당히 다르지 않나요??
물론 맞추신 분에겐 따봉을 보내드립니다. 크으~👏👍👍

즉, 메인 액티비티의 onStop()은 생각했던것과는 다르게 디테일 액티비티의 라이프사이클(생명주기) 작업이 끝이나야 호출이 되게 됩니다.

2번 질문의 답

이번엔 2번 면접 질문 내용입니다.
1번과는 반대되는 내용입니다.

  • 유형 1 (오답)
    <디테일 액티비티>onPause()
    <디테일 액티비티>onStop()
    <디테일 액티비티>onDestroy()
    <메인 액티비티>onResume()

이번에도 거의 대부분의 개발자분들이 위의 답변을 해주셨습니다.

이번에는 맞았을까요???

다음도 실제로 돌려본 샘플 코드 로그 결과 입니다.

(정답)






응...? 으응?



대부분의 개발자분들이 생각하셨던것처럼 디테일 액티비티의 종료에 관련된 라이프사이클(생명주기)이 끝이 난뒤 메인 액티비티의 라이프사이클(생명주기)이 호출될것이라고 생각하지만 실제로는 아닙니다.
그리고 onRestart()라는 녀석이 갑자기 툭 튀어나옵니다.

어떠신가요? 많이 다르죠?
이번에도 맞추신분들은 제대로 알고 계신게 맞습니다!👏👏👏👏

그리고 틀리셨던분들도 자책 할 필요는 없습니다.
저도 대학시절 잘못알고 있었던 부분이었으니까요.

이전 포스팅으로 가서 다시 한번 플로우차트를 찬찬히 살펴봅시다.
안드로이드 액티비티 생명주기(LifeCycle)

참고

관련 내용으로 책도 추천합니다.
안드로이드 프로그래밍 Next Step 제대로 된 앱을 만드는 컴포넌트 활용 노하우 (노재춘 저, 인사이트)

아래는 영어로 잘 정리된 글입니다.
https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-i-single-activities-e49fd3d202ab

샘플 코드

라이프사이클 샘플 깃허브 주소입니다.
공부용 깃허브 계정이라 다른 자료는 없습니다만 샘플 코드만 내려 받으셔서 실행해서 확인해보시면 될 것 같네요.
라이프사이클 샘플코드

긴 글 읽어주셔서 감사합니다.

다음엔 안드로이드 아키텍쳐 패턴에 관련하여 포스팅 하도록 하겠습니다.

profile
12년도부터 대학에서 안드로이드 모바일을 전공으로 시작하여 "진짜 개발자"를 꿈꾸며 개발공부를 시작했습니다. SW 개발이 재밌어서 여러 방면으로 스터디하며 현재는 새로운 환경 및 새로운 트렌드에도 유연하게 적응을 잘하는 개발자로 성장해 나가는 중입니다. 글 내용에 대한 피드백은 언제나 환영입니다!

2개의 댓글

comment-user-thumbnail
2020년 7월 9일

1번 질문의 답
유형 2
<메인 액티비티>onPause()
<디테일 액티비티>onCreate()
<디테일 액티비티>onStart()
<디테일 액티비티>onPause()
<메인 액티비티>onStop()

인 것 같은데 오타나신 것 같아요

좋은 내용 감사합니다~

1개의 답글