본문 바로가기
Android/Develop

[Android] 생명주기, onPause와 onStop의 차이점

by hyun's life_developer 2019. 9. 6.

 

 

안녕하세요~ 초보개발자 시아아빠입니다! 이번 포스팅은 안드로이드의 생명주기에 대하여 알아보겠습니다.

 

가장 기본이 되면서, 잘 알아두시면 개발의 폭이 넓어질 내용입니다.

 

그래서 안드로이드 입문하실때 이 내용을 짚고 넘어가시면 좋겠습니다.

안드로이드 생명주기

 

개발자가 만든 어플의 특정 Activity가 실행이되면

 

기본적으로

onCreate() -> onCreate() -> onStart() -> onResume() -> Activity Starts로 Activity가 실행이 됩니다. 

실행 후 다른 Activity가 앞으로 올 경우 onPause()가 실행되며

다시 Activity가 앞으로 올 경우 onResume()이 실행됩니다.

 

실행 순서대로 설명을 하겠습니다.

1. onCreate()

...더보기

- onCreate는 Activity가 최초로 생성할 때 호출됩니다. 즉, 초기화 설정을 하는 곳이며

 보관된 상태의 Activity가 있을 경우 그 상태를 저장중인 Bundle객체를 받아서 사용합니다.

public void onCreate(Bundle savedInstanceState)

{
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_layouts);

}

많이 보신 형태죠?

 

onCreate()가 호출된 후에는 onStart()가 호출됩니다. 이때에는! 강제종료가 불가능합니다.

 

2. onRestart()

...더보기

- onRestart()는 Activity가 정지된 후에 다시 시작하기 전에 호출됩니다. onRestart()가 호출된 후에는 onStart()가 호출되는데 이때에도 마찬가지로 강제종료가 불가능합니다.

 

많은 분들이 onRestart()와 onResume에서 고민을 합니다.

Activity가 재생성? 또는 다시 시작?할때 어디에 구현을 해주어야 하는지!

 

onRestart()는 말씀드렸다시피 Activity가 정지된 후! onStop()이 불린 후에 다시 시작하기 전에 호출됩니다.

따라서 onStop()이 불리지 않았다면 onRestart()는 호출되지 않습니다.

 

반대로 onResume()의 경우 위 생명주기 그림과 같이 항상 불리게 됩니다.

이유는 onResume()은 focus를 다시 얻었을때 불리기 때문입니다.

3. onStart()

...더보기

- onStart()는 Activity가 사용자에게 보여지기 직!전!에 호출됩니다. 

이후에 onResume()으로 이어집니다. 이때에는 마찬가지로 강제종료가 불가능합니다.

4. onResume()

...더보기

- onResume()Activity가 사용자와 상호작용을 하기 직전에 호출됩니다. Stack의 최상위에 위치해있습니다.

onResume()은 resume의 뜻, 재개하다 다시 시작하다와 같습니다.

Activity 실행 직전에는 항상 onResume()을 지납니다.

활성화 상태에 있다가 다른 Activity가 활성화되면 onResume()이 실행되며 실행중에 다른 Activity가 활성화 되었을때 기존 Activity가 화면에 보이면 onPause()에서 처리하고 보이지 않으면 onStop()에서 처리하게 됩니다.

5. onPause()

...더보기

- onPause()는 다른 Activity가 활성화 되었을 때 호출됩니다.  말처럼 잠시 멈춤상태에 있는데

다시 Activity가 활성화되면 onResume()이 호출되어 Activity 활성화를 하지만,

onPause()상태에 있다가 메모리가 부족하게 되면 Process Kill을 하여 메모리를 반환합니다.

 

Activity가 남아있을때 onPause()

위와같이 onPause()는 Activity화면이 조금이라도 남아있을 때 진행되지만

 

보이지 않게되면 onStop()

지금과 같이 다른 Activity가 기존 Activity를 가려서 보이지 않게 되면 onStop()을 호출합니다.

 

예로 폰의 알람이 울리거나 전화가 오는 경우 onPause()

Activity가 완전히 화면을 벗어나면 onStop()

6. onStop()

...더보기

- onStop()은 다른 Activity가 기존 Activity를 완전히 가려서 더 이상 보이지 않았을 때 호출됩니다. 

Activity가 다시 시작되면 onRestart()를 호출하여 onStart() -> onResume()을 통해 활성화됩니다.

이 때에는 강제종료가 가능합니다.

 

주의해야할 것은 위 onRestart()때 설명한 것처럼 

Activity가 다시 시작되면 onRestart() -> onStart() -> onResume()이다.

하지만 onStop()을 거치지 않았다면 onStart() -> onResume()이 된다.

앱이 다시 실행이 된다고 할때 onResume()은 항상 거치지만 onRestart는 onStop()은 실행여부와 관련있습니다.

따라서 앱이 다시 실행이 될 때 무조건 실행해야 하는 것은 onResume()에서 실행해주셔야 합니다.

7. onDestroy()

...더보기

- onDestroy()는 Activity가 삭제되기 직전에 호출됩니다.

Activity가 받는 마지막 호출 메소드로 finish()를 호출하여 사용하게 됩니다.

개인적으로는 상황에 맞게 클라이언트의 요구에 맞게 finish()를 넣어 사용하여 많이 활용하는 메소드는 아닙니다.

다만 아직 잘 모르는 초보개발자의 생각임을 밝힙니다 ㅎ

 

생명주기를 잘 알고 개발하는 것과 생명주기를 모르고 개발하는 것의 차이는 이번 프로젝트를 하면서 크게 와닿았습니다. 초보개발자 및 입문자 분들은 생명주기의 개념을 알고 계시는 것이 많은 도움이 될 것이라 생각됩니다.

 

 

댓글