액티비는 아래 그림과 같이 생명주기(LiftCycle)를 가지고 있습니다.
이 생명주기에 따라 적절한 메서드가 호출되므로 이를 숙지해서 액티비티를 작성해야 합니다.
액티비티의 생명주기는 onCreate() > onStart() > onResume() > onPause > onStop() > onDestroy 순으로 실행되며
경우에 따라서 onRestart() 메서드가 호출되기도 합니다. 각각의 순서에 대한 설명은 아래의 표에서 참고하시면 됩니다.
메소드 | 설명 | 다음 메소드 |
onCreate() | 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨. | onStart() |
onRestart() | 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출됨. | onStart() |
onStart() | 액티비티가 사용자에게 보여지기 바로 직전에 호출됨. | onResume() or onStop() |
onResume() | 액티비티가 사용자와 상호작용하기 바로 전에 호출됨. | onPause() |
onPause() | 다른 액티비티가 보여질 떄 호출 됨. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드. | onResume() or onStop() |
onStop() | 액티비티가 더이상 사용자에게 보여지지 않을 떄 호출됨. 메모리가 부족할 경우에는 onStop()메소드가 호출되지 않을 수도 있음. | onRestart() or onDestroy() |
onDestroy() | 액티비티가 소멸될 떄 호출됨. finish()메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨. | X |
쉽게 말해서
카카오톡을 예를 들어 보면 처음 실행을 할 때 카카오톡 로고 화면이 잠시 보인 후 마지막으로 사용했던 탭으로 진입합니다. 이때 로고가 보이는 화면이 하나의 액티비티입니다. 그 후에 진입하는 친구 목록이나 채팅 목록 외 여러 화면 또한 하나의 액티비티입니다.
이런 액티비티는 생명주기를 갖습니다. 카카오톡으로 다시 예를 들어보면 카카오톡을 하다가 유튜브 영상을 보기 위해 유튜브 앱을 실행하면 카카오톡 화면은 더 이상 보이지 않고 유튜브 앱 화면이 보입니다. 이때 카카오톡과 유튜브의 액티비티는 각자의 생명주기에 따라 호출되는 함수가 있습니다.
생명주기를 좀 더 쉽게 이해하려면 실제 화면에 표시 유무를 생각하면 됩니다.
먼저 최초로 앱을 실행하면 onCreate()가 호출되는데 이때 초기화 관련 작업을 하면 좋습니다.
다음으로 onStart()가 호출되는데 이 시점부터 사용자가 액티비티를 볼 수 있습니다.
그리고 액티비티가 실제 사용자와 상호작용이 가능한 포 그라운드에 위치하면 onResume()이 호출됩니다.
이 상태를 액티비티가 실행 중인 것으로 봅니다.
반대로 액티비티가 실행 중인 상태에서 사용자와 상호작용이 불가능한 상태
포커스를 읽은 상태가 되면 onPause()가 호출되고 onStop()은 액티비티가 더 이상 보이지 않을 때 호출됩니다.
그리고 액티비티가 종료되거나 앱 프로세스 자체가 종료되면 onDestroy()가 호출됩니다.
생명주기를 사용하는 이유
- 사용자가 앱을 사용하는 중 전화가 걸려오거나 다른 앱으로 전환할 때 비정상 종료되는 상황을 막기 위해
- 사용자가 앱을 활발하게 사용하지 않는 경우, 시스템 리소스가 소비되지 않기 위해
- 사용자가 앱에서 나갔다가 돌아올 때 사용자의 진행 상태가 손실되지 않기 위해
- 화면이 가로 방향과 세로 방향 간에 회전할 경우 비정상 종료되거나 사용자의 진행상태가 손실되지 않기 위해
'Android' 카테고리의 다른 글
[Android] ListView 사용 (0) | 2021.02.15 |
---|---|
[Android] View Binding (0) | 2021.02.01 |
[Android] Layouts (0) | 2021.01.28 |
[Android] Palette (Helper) (0) | 2021.01.27 |