Android

[Android] 생명주기 테스트


📌 생명주기 테스트

생명주기를 여러 번 공부해왔고, 실전에서도 많이 사용해보았지만, 내 자신에게 '생명주기에 대해서 낱낱히 설명해 봐!' 라고 묻는다면, 늘 새로운 기분이 든다. 오늘은 약간이라도 애매한 부분을 확신으로 바꾸기 위하여 생명주기 테스트 프로젝트를 만들어 보기로 하였다

 

🧩  Test Case

  1. A Activity → B Activity → A Activity
  2. A Activity → Transparent Activity (배경이 투명한 투명 액티비티) → A Activity
  3. A Activity → B Activity → B Activity (singleTop)

테스트를 하는 생명주기들

enum class LifeCycleEx{
    CREATE,
    RESTART,
    START,
    RESUME,
    PAUSE,
    STOP,
    DESTROY,,
    NEWINTENT
}

 

📍A Activity → B Activity → A Activity

A Activity 시작 !!

A Activity: CREATE
A Activity: START
A Activity: RESUME

A : 화면이 호출되어 UI를 inflate해야하므로 CREATE
화면이 시작되기 직전 START 호출
화면이 시작되어 전면에 나타날 때 RESUME

B Activity 시작 !!

A Activity: PAUSE
B Activity: CREATE
B Activity: START
B Activity: RESUME
A Activity: STOP

A : 화면이 바뀌는 동안 유저와 상호작용 불가능하므로 PAUSE
B : 화면이 호출되어 UI를 inflate해야하므로 CREATE
화면이 시작되기 직전 START 호출
화면이 시작되어 전면에 나타날 때 RESUME
A : B의 화면이 나타나 자신은 후면으로 갔기 때문에 STOP

B Activity 뒤로 가기 키 터치 !!

B Activity: PAUSE
A Activity: RESTART
A Activity: START
A Activity: RESUME
B Activity: STOP
B Activity: DESTROY

B : 화면이 바뀌는 동안 유저와 상호작용 불가능하므로 PAUSE
A : 기존의 화면이 다시 전면에 나오는 것이므로 RESTART 호출
화면이 시작되기 직전 START 호출
화면이 시작되어 전면에 나타날 때 RESUME
B : B의 화면이 나타나 자신은 후면으로 갔기 때문에 STOP
뒤로가기 키가 호출하는 finish로 시작되었기 때문에 DESTORY 호출

 

📍A Activity → Transparent Activity (배경이 투명한 투명 액티비티) → A Activity

Transparent Activity 시작 !!

A Activity: PAUSE
Transparent Activity: CREATE
Transparent Activity: START
Transparent Activity: RESUME

A : 화면이 바뀌는 동안 유저와 상호작용 불가능하므로 PAUSE
Transparent : 화면이 호출되어 UI를 inflate해야하므로 CREATE
화면이 시작되기 직전 START 호출
화면이 시작되어 전면에 나타날 때 RESUME
(A : Transparent의 화면이 나타났으나 자신은 후면으로 가지 않았으므로 STOP 호출 X!)

Transparent Activity 뒤로 가기 키 터치 !!

Transparent Activity: PAUSE
A Activity: RESUME
Transparent Activity: STOP
Transparent Activity: DESTROY

..?! 솔직히 조금 놀랐으나, 6개의 생명주기는 대칭적으로 생각해야 하기에 수긍이 가는 부분. 그러나 진짜 놀랍긴했다

Transparent : 화면이 바뀌는 동안 유저와 상호작용 불가능하므로 PAUSE
A : 화면이 후면에 들어간 적이 없어 STOP이 호출된 적이 없으므로 이와 대칭되는 START 또한 불리지 않음
다시 유저와 상호작용 할 수 있으므로 RESUME 호출
Transparent : B의 화면이 나타나 자신은 후면으로 갔기 때문에 STOP
뒤로가기 키가 호출하는 finish로 시작되었기 때문에 DESTORY 호출

 

📍A Activity → B Activity → B Activity (singleTop)

B Activity 시작 !!

A Activity: PAUSE
B Activity: CREATE
B Activity: START
B Activity: RESUME
A Activity: STOP

A : 화면이 바뀌는 동안 유저와 상호작용 불가능하므로 PAUSE
B : 화면이 호출되어 UI를 inflate해야하므로 CREATE
화면이 시작되기 직전 START 호출
화면이 시작되어 전면에 나타날 때 RESUME
A : B의 화면이 나타나 자신은 후면으로 갔기 때문에 STOP

또다시 B Activity 시작 !!

B Activity: PAUSE
B Activity: NEWINTENT
B Activity: RESUME

B : 화면이 바뀌는 동안 유저와 상호작용 불가능하므로 PAUSE
singleTop이라 방금의 자신이 재사용되어 NEWINTENT 호출
다시 유저와 상호작용이 가능하므로 RESUME

 

📚정리

사실 중요한 것은 경우에 따른 테스트보다는 생명주기 각각을 자세히 알고 있어야한다는 것이다.
또한 생명주기는 대칭구조로 알아두는 것이 편하고, 확실히 이해하기에도 좋다는 생각이 든다.
그저 가끔 복기하는 용도로 몇몇 경우를 더 추가하긴 해보아야 겠다.

 

https://github.com/zladnrms/LifeCycleTestActivity