안녕하세요
오늘은 Activity의 LifeCycle에 대해 알아보겠습니다 :)
수없이 봐온 LifeCycle이지만, 더 상세하게 알아둔다면 좀 더 좋은 구조를 가진 앱을 개발할 수 있을 것 같아요 💪
위의 사진 순서대로 알아보겠습니다
1. onCreate()
최초로 1회만 실행되기 때문에 필수로 구현되어야 하는 부분이고, 초기 1회만 실행되어야 하는 부분을 넣어줍니다
주로 setContentView()를 onCreate에서 호출합니다
2. onStart()
사용자에게 화면이 보여질 때 호출되고, 여러 번 호출이 가능합니다
3. onResume()
사용자와 상호작용을 할 수 있을 때 호출되며, 여러 번 호출이 가능합니다
즉, 포커스를 얻을 때 실행되는 부분이며 액티비티가 포커스를 잃기 전까지 이 상태에 있습니다
4. onPause()
액티비티가 화면에 보이고 있지만, 포커스를 잃었을 때의 상태를 의미합니다 (액티비티가 다시 돌아오거나, 화면에 보이지 않기 직전의 상태)
이 때, 포커스를 다시 얻어 액티비티가 사용자 이벤트를 처리할 수 있으면 onResume이 호출되고, 액티비티가 보이지 않게 되면 onStop이 호출됩니다
onPause 동작시간은 길지 않으므로, 여기서 데이터 저장이나, DB 혹은 네트워크 호출 같은 무거운 작업을 하면 안됩니다 😭
5. onStop()
액티비티가 종료되지 않고 사용자에게 보이지 않을 때 호출되므로, 앱은 필요하지 않은 리소스를 해제하거나 조정합니다
ex) 애니메이션 종료
만약 다시 보이게 된다면, onRestart() -> onStart() -> onResume()
그대로 종료되게 된다면, onDestroy()를 호출합니다
6. onDestroy()
액티비티가 종료되거나 화면 회전, 멀티모드와 같이 Activity가 소멸될 때 호출됩니다
화면 회전
위에서 잠깐 언급했지만, 화면이 회전이 될 때 LifeCycle을 보면
onPause() -> onStop() -> onSaveInstanceState() -> onDesotry() 로 종료가 되고 별도의 작업을 거치지 않으면, 액티비에서 발생한 데이터가 모두 사라집니다
그리고, onCreate() -> onRestoreInstanceState() -> onResume()으로 액티비티를 재생성합니다
데이터를 유지하려면, 아래의 2가지 방법이 있는데 ViewModel은 이전 포스팅에 소개된 적이 있으므로, 1번만 다루겠습니다
1. onSaveInstanceState() : Bundle에 데이터를 저장
2. ViewModel() 2022.06.27 - [Android] - [Android] MVVM 구현하기
📌 onSaveInstanceState()
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("name", "test User")
}
Bundle에 put Method를 사용해 데이터를 저장합니다
📌 onRestoreInstanceState()
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
val data = saveInstanceState.getString("name")
}
Bundle에 get Method를 사용해 저장된 데이터를 가져옵니다
이번 포스팅은 여기까지입니다! 각 라이프사이클에 맞게 구조를 잘 짜야겠어요🙇🏻♀️
궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊
'📱 Android' 카테고리의 다른 글
[Android] Fragment LifeCycle (0) | 2022.07.06 |
---|---|
[Android] 4대 Component (0) | 2022.07.05 |
[Android] MVVM 구현하기 (0) | 2022.06.27 |
[Android] Jetpack Architecture #1 DataBinding (0) | 2022.06.05 |
[Android] Pattern (MVC, MVP, MVVM) (0) | 2022.05.30 |