앱을 만들 때 생명주기를 적절하게 사용하는 것은 매우 중요하다.
앱이 멈추거나, 불가피하게 종료가 되거나, 다시 시작되거나 하는 등의 상황에 대해서
적절하게 처리할 수 있기 때문이다.
액티비티의 대표적인 상태 정보는 다음과 같다.
상태 | 설명 |
실행(Running) | 화면상에 액티비티가 보이면서 실행되어 있는 상태. 액티비티 스택의 최상위에 있으며 포커스를 가지고 있음 |
일시 정지(Paused) | 사용자에게 보이지만 다른 액티비티가 위에 있어 포커스를 받지 못하는 상태. 대화상자가 위에 있어 일부가 가려진 경우 해당함 |
중지(Stopped) | 다른 액티비티에 의해 완전히 가려져 보이지 않는 상태. |
이렇게 액티비티의 상태 정보가 변화하는 것을 액티비티의 생명주기(Life Cycle) 또는 수명주기라고 하며,
액티비티의 상태가 변화하면서 각각에 해당하는 메서드가 자동으로 호출된다.
생명주기 메서드는 다음과 같이 6가지가 있다.
| onCreate
액티비티가 처음에 만들어졌을 때 호출된다.
화면에 보이는 뷰들의 일반적인 상태를 설정하는 작업을 한다.
뷰에 대한 클릭 리스너는 여기에서 설정해주도록 한다.
| onStart
액티비티가 화면에 보이기 바로 전에 호출된다.
보통 네트워크 통신을 통해 데이터를 받아오는 작업이나,
서비스 또는 리스너 등록 등의 작업을 한다.
| onResume
액티비티가 사용자와 상호작용하기 바로 전에 호출된다.
액티비티가 멈췄다가 다시 실행될 때 필요한 작업을 한다.
| onRestart
액티비티가 중지된 이후에 호출되는 메서드로 다시 시작되기 바로 전에 호출된다.
거의 사용되지 않는 메소드이다.
| onStop
액티비티가 사용자에게 더 이상 보이지 않을 때 호출된다.
액티비티가 소멸되거나 또 다른 액티비티가 화면을 가릴 때 호출된다.
서비스 혹은 쓰레드, 백그라운드 동작을 제어하는 작업을 한다.
| onDestroy
액티비티가 소멸되어 없어지기 전에 호출된다.
메모리 낭비가 될 수 있는 자원을 해제해주는 작업을 한다.
| onCreate vs onStart
처음 개념을 익힐 때, 둘의 차이를 느끼지 못할 수 있다.
'onStart()에서 해야할 작업을 onCreate()에서 해주면 되지 않나?' 생각할 것이다.
하지만 차이는 분명히 있다.
onCreate()에서는 액티비티가 실행될 때 딱 한 번만 처리해도 되는 작업을 해주면 된다.
위에서 말했듯이, 레이아웃이나 클릭 리스너는 처음에만 설정해두면 계속 사용할 수 있다.
onStart()의 경우에는 onStop()이 된 이후에 다시 진행할 작업에 중점을 두어야한다.
액티비티가 멈췄다가 재실행 됐을 때, 데이터를 다시 받아오거나 서비스를 다시 실행하거나 하는 등의 작업이 해당된다.
| onStart vs onResume
두 메소드의 차이는 액티비티 화면이 전체 다 가려졌냐 일부만 가려졌냐이다.
쉽게 말하자면 onStop()은 보고있던 화면이 완전히 가려졌을 때 호출된다.
전화가 온다거나, 다른 액티비티가 실행된다거나 하는 게 이에 해당된다.
반면 onPause()는 액티비티 화면의 일부가 가려졌을 때 호출된다.
알람이 울리거나, 메세지가 와서 포커스가 잠시 다른 데로 갔을 때나
다이얼로그 같은 뷰가 화면에 떴을 때가 이에 해당된다.
'Mobile > Android' 카테고리의 다른 글
[ Android ] android java.lang.NoSuchMethodError: com.intellij.ide.plugins.PluginManagerCore.loadDescriptors() (0) | 2020.11.02 |
---|---|
[ Android ] RecyclerView 와 ListView 차이 (0) | 2020.10.26 |
[ Android ] Manifest 매니패스트 (0) | 2020.10.04 |
[ Android ] 다이얼로그 띄우기 (0) | 2020.09.06 |
[ Android ] 사용자가 원하는 디자인으로 토스트 만들기 (0) | 2020.09.05 |