안드로이드 생명주기에 따라서 앱을 개발하면서,

다른 곳에 나갔다가 다시 앱에 들어온 경우,

onResume에서 무언가를 처리할 경우가 있습니다.

예를 들면, 실시간으로 카운팅을 하고 있었다든가의 경우인데요.

나갔다가 다시 들어오면 그 값을 그대로 들고 이어서 카운팅을 한다든지 해야하는데요.

오늘은 그러한 방법에 대해서 정리해 보도록 하겠습니다.

 

참고로 이 글에서는 전체 생명주기에 관해 자세히 다루지 않으므로,

안드로이드 생명주기에 관한 글은 아래링크를 참조해 주세요.

Activity 와 Fragment 의 lifecycle (생명주기)

 

 

1. onResume과 onPause

먼저 큰 그림에서 onResume과 onPause에 대해서 알아보도록 하겠습니다.

아래 이미지에서 볼 수 있듯이,

 

 

 

1. onStart와 onResume

Activity가 최신 데이터로 업데이트되어 있어야 하는 경우,

onResume에 무심코 update를 하는 코드를 넣게되는 경우가 많은데요.

 

onStart는 User에게 해당 Activity의 UI가 보이기 시작하는 시점으로,

Foreground로 진입해서 유저와 인터랙션을 할 수 있도록 준비하는 시점입니다.

onResume에서는 Foreground로 진입되어서, 해당 Activity의 UI와 인터랙션이 가능한 시점입니다.

 

유저에게 보이는 시점은 onStart인데,

onResume은 왜 필요하며, 왜 코드를 onResume에 많이 넣는 것 일까요?

그것은 바로 아래그림을 보면 이해하기가 쉬운데요.

 

다른 Activity가 Foreground로 올라왔다가 유저가 해당 Activity로 다시 돌아온 경우,

onPause 호출 후 onResume 이 호출이 되게 되는데요.

onStart를 거치지 않고, onResume이 호출되는 경우입니다.

 

항상 최신의 데이터를 가지고 있어야 하는 경우,

Dialog를 보여준다든가 하는 UI상의 작은 변화에도,

백그라운드 Service에서 데이터를 가져와 최신화 하거나,

네트워크를 호출하여 최신화 해야한다면,

onResume이 필요 한 것이겠지요.

 

하지만 그정도가 아니고, 유저에게 해당 액티비티의 UI가 보이는 시점부터는

갱신하지 않아도 된다면 onStart를 쓰면 됩니다.

onResume이 onStart보다 훨씬 더 많이 호출될 가능성이 높으므로,

onResume에 네트워크를 호출한다는 것은 더 많은 리소스를 사용할 수 있다는 것 이지요.

공식문서에서도 되도록 onResume보다는 onStart를 사용할 것을 권고하고 있습니다.

 

또 한가지 고려할 것은 onStart는 매우 짧은 순간으로,

무겁거나 시간이 오래 걸리는 과업을 수행할 수 있는 곳은 아니라는 점 입니다.

 

2. onPause와 onStop

onPause와 onStop의 관계도 비슷하도고 할 수 있습니다.

onResume에서

다른 Activity가 Foreground로 들어오기 시작하면 onPause가 호출이 되며,

유저에게 UI가 보이기 시작하지 않으면 onStop이 호출될 텐데요.

onResume에서 리스너같은 것을 등록하였다가, onPause에서 해지하거나,

onStart에서 등록하거나 생성한 리소스를 onStop에서 해지해 주는 것이 보통입니다.

이들을 pair처럼 사용하는 것인데요.

공식문서에서도 onResume에서 초기화한 리소스들은 onPause에서 릴리즈해 줄 것을 권유하고 있습니다.

 

한가지 주의할 것은, onPause는 매우 짧은 시간동안 유지되므로,

시간이 많이 걸리거나 무거운 과업은 onStop에서 해야 합니다.

또한 유저가 보고있는동안 사용해야 할 리소스들도,

onStop에서 릴리즈해줄 것을 공식문서는 말하고 있네요.

 

 

 

 

 

 

유저에게 UI가 보여지는 시점을 기준으로 갱신하거나, Release해 주어야 한다면,

onStart와 onStop Pair를 이용해서 코딩을 하면 되구요.

유저가 UI와 인터랙션을 할 수 잇는 시점을 기준으로 갱신 및 Release한다면,

onResume과 onPause를 기준으로 하면 될 것 입니다.

 

728x90

+ Recent posts