-
Android Life Cycle of Activity(안드로이드 액티비티 생명주기)Android/Concept 2019. 7. 30. 16:59
저번에 안드로이드의 시스템적 구조에 대해서 공부했으니, 이번에는 실제 안드로이드 코딩 때 많이 쓰는 항목인 생명주기에 대해 공부 해 봅시다.
위 그림이 안드로이드 Activity의 생명주기입니다. 생각보다 단계가 별로 없고 이름들이 직관적입니다! 일단 하나하나씩 어떤 놈들인지 살펴보죠.
OnCreate()
먼저 create, 창조하다? 입니다. 말 그대로 액티비티가 처음 시작 시 제일 먼저 발동되는 함수입니다. 완~~전 맨 처음에 부릅니다. 그래서 왠만한 경우 이놈을 다시 호출하지는 않아요.
(예외로, 화면 회전 할 경우 액티비티를 새롭게 만들기 때문에 onCreate()이 다시 호출 됩니다!)
저희가 안드로이드 코딩을 하다보면, 이 함수에 여러 사항들을 적고 시작하죠. 그 이유가 최초로 실행 시 여러 설정들을 해주고 그것들을 뒤에 써야하기 때문입니다.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) }
요놈 많이 보셨을겁니다. 몇 가지 설명을 해드리자면
setContentView()
xml 파일인 레이아웃을 inflate(부풀리다) 하는 함수입니다. 즉, xml 쪼가리를 직접 View 형태로 보일 수 있게 배치하는 놈이죠.
savedInstanceState
요놈은 Bundle 이라는 클래스인데, 앱이 꺼지든 말든 항상 유지되는? 자료형입니다. 정확히 말해서는 구조체 식으로 이루어져 있다고 하는군요. 파이썬 dict() 같은 Hash 형태로 돼 있습니다.
어쨋든 이게 '왜 onCreate() 인자로 받아오냐?' 라는 의문이 드는데, 위에 말 했듯이 앱이 꺼져도 자료가 안날라갑니다. 즉, 앱을 끄기 전에 다음에 쓰기 위한 데이터가 있다면 저 savedInstanceState에다가 저장하면 된다는 겁니다. 그리고 다음에 onCreate()으로 앱이 실행 될 때, 거기서 값을 꺼내오고 맘대로 하면 되는거죠!
(정확히는 onSaveInstanceState() 이라는 함수로 저장을 합니다!)
OnStart()
음... onCreate()과 onResume() 사이에 있는 놈이라 이해하시면 편합니다.. 위에 onCreate()이 최초 한 번만 실행하는 놈이기 때문에, 만약 onRestart()와 같이 액티비티가 뭔가 재 실행 되는 경우, onCreate()을 불러오긴 좀 그러니 만들어 놓은 느낌입니다.
(아직 화면에 View들이 보이지는 않은 상태입니다!)
(로그인 기능 구현에서 로그인 했는지, 안 했는지 구분하는 경우가 대표적인 예라는군요)
여튼 onStop() 상태에서 다시 액티비티가 실행 될 때(onRestart()) 요놈이 실행되는데, 어쩔 때 그러는지 자세한 사항은 뒤에서 설명하죠!
OnResume()
요놈은 액티비티의 View들이 사용자 화면에 보이는 시점입니다. 즉, 실제로 사용자와 상호작용 할 때 바로 직전? 느낌입니다. 이놈도 onPause()랑 짝 맞추려고 만든 느낌이긴 한데... 여튼 그만큼 자주 호출이 되는 함수입니다.
아, 참고로 onCreate() 부터 onResume()까지 실행 되듯이, onRestart()로 onStart()가 호출 되었을 때 onResume()도 순서에 따라 실행되게 됩니다!
OnPause()
여기부터 이제 이해가 좀 되실겁니다. onStart() onResume() 이 두 놈은 뭔가 이해하기가 난해하죠? 각각 onStop() onPause() 로 대응해서 이해하시면 더 잘 될겁니다!
이놈은 액티비티에 포커스를 잃었을 때 호출 됩니다. 예를 들자면 다이얼로그나 팝업 창과 같이 작은 창들이 떴을 때, 그 뒤에 있는 화면은 포커스를 잃죠? 그런 경우입니다! 액티비티가 다 가려지진 않고 초점만 잃은 상태!
그래서 그런 팝업 창이 닫히고, 전에 액티비티가 다시 돌아 왔을 때 onResume()이 호출 되는겁니다!
OnStop()
얘는 액티비티가 완전히 화면에서 가려졌을 때 호출 됩니다. 즉, 다른 액티비티를 호출하거나 아니면 홈키 눌러서 앱 나갔을 때가 예시겠죠.
그럼 다시 돌아오면? onRestart()가 발동해서 onStart()가 발동됩니다. 참고로 찾아보니, onRestart()가 호출 된다고 해서 onStart()가 호출 안되거나 하지는 않는군요. 무조건 호출 한답니다.
근데 이런 의문이 드는군요. 그럴거면 onStart()에 다 때려 박으면 되지, 왜 onRestart()가 있나? 네. 찾아보니까 잘 안쓴다고 하는군요.
하지만 필요한 경우는 분명 있습니다. 저희가 onStart()에 A라는 기능을 넣어 놓았는데, 앱이 Stop 됐다가 다시 켜졌을 때 그 A라는 기능을 다시 부르면 안 되는 겁니다. 그래서 onRestart()에 따로 B라는 기능을 넣어 놓는거죠!!
OnRestart()
위에 설명을 해 놓았기 때문에 패스...
OnDestroy()
완전히 앱이 Cut 당했을 때 입니다. 앱을 아예 관리자에서 껐거나, finish() 함수를 호출 해서 끄거나...
이것들을 잘 이해해야 기능구현 하실 때 어느 생명주기 딴에서 실행 할 지 잘 선택 할 수 있게 됩니다!
'Android > Concept' 카테고리의 다른 글
Android about Context (안드로이드 Context에 대하여) (1) 2019.08.07 Android Components(안드로이드 구성요소) (0) 2019.08.03 Android Architecture(안드로이드 구조) (1) 2019.07.26