Lifecycle
1. 생명주기 (Lifecycle)
안드로이드에는 리소스 제한이 존재하여 Activity가 항상 살아있지 못한다. Activity는 Activity가 보여주는 화면(View)이 화면 상에서 뒤로 가거나, 사라지게 될 경우에 특정한 메서드들을 호출하게 되는데, Activity의 Lifecycle은 Activity가 각각의 상황에서 어떠한 메서드를 호출하는지 알려준다.
위 그림은 구글 공식문서에 있는 Activity의 Lifecycle이다. 생명주기를 정확히 이해하고 때에 맞는 적절한 작업을 해야만 안정적인 앱을 만들 수 있다.
그렇다면 하나씩 무슨 역할을 하는 메소드인지 알아보자.
1.1. onCreate
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
우리가 프로젝트를 새로 생성하면 MainActivity 클래스 안에 onCreate가 자동으로 생성되어 있는 것 을 볼 수 있다. Activity가 시작될 때 불리는 메소드로써 생명 주기 동안 딱 한 번만 실행되는 메서드이다.
액티비티 최초 실행 시에만 수행 해야할 작업들을 여기에 작성하면 된다. ex)화면 레이아웃 정의 , 뷰 생성
1.2. onStart
Activity가 보이기 전에 호출 되는 메소드이다.
화면에 진입할 때마다 실행되어야 하는 코드를 이곳에 작성하면 된다.
1.3. onResume
Activity의 일부가 보일 때 호출되며 다른 Activity가 Activity를 덮어버리거나 앱 사용중 전화, 문자 등으로 잠시 앱을 떠나는 등 잠시 액티비티가 일시정지 되었다가 돌아오는 경우 onResume 메소드가 호출된다.
Activity가 재개되었을 때 실행해야 하는 코드가 있다면 이곳에 작성하면된다.
다만, 일부가 보일때부터 전체가 보일 때까지의 시간만큼만 수행되기 때문에 가벼운 작업만을 수행해야 한다. 만약 긴 작업을 수행한다면 버벅임이 생길 수 있다.
1.4. onPause
방해되는 이벤트가 발생하고 Activity의 일부는 보이지만 다른 Activity가 foreground로 나올 때 이 메소드가 호출된다. 생명주기를 다룬 구글 공식 문서의 페이지에서는 onPause메소드와 관련하여 이러한 글이 있다.
onPause() execution is very brief, and does not necessarily afford enough time to perform save operations. For this reason, you should not use onPause() to save application or user data, make network calls, or execute database transactions; such work may not complete before the method completes.
위 내용은 onPause는 아주 잠깐 실행되는 메소드이므로 메소드가 완료되기 전에 작업이 끝나지 않을 수 있기 때문에 데이터를 저장하거나, 네트워크를 호출하는 등 무거운 작업을 하면 안된다고 경고하고 있다.
그렇기 때문에 무거운 작업을 수행할때는 바로 다음 설명할 onStop에서 수행해야한다.
1.5. onStop
Activity가 사용자에게 더 이상 보이지 않을때 이 메서드가 호출되며 앞서 말한것 처럼 무거운 작업은 이곳에서 처리해야 한다.
1.6. onRestart
사용중인 앱에서 홈으로 나갔다가 다시 돌아오거나 다른 Activity로 갔다가 뒤로 가기 버튼을 통해서 돌아오는 경우 이 메소드가 호출된다.
1.7. onDestroy
활동이 종료되는 경우나 구셩변경(ex:기기 회천)으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우에 호출되는 메소드이다.
2. Activity InstanceState Save Methods
아래의 메소드들은 Activity의 Lifecycle에는 들어가지 않지만, Activity에서는 없어서는 안되는 메소드들이다.
Activity의 상태를 저장 및 복원하는 콜백 메소드이다. Activity의 상태를 저장한다는 것은 Activity의 모습과 자료 등을 기기의 저장 장치에 저장함을 의미한다.
![](https://blog.kakaocdn.net/dn/bFBRpy/btrIMBjX6KK/gb4kHRJ1s7gnYtc89QjXn1/img.png)
2.1. onSaveInstanceState()
상태를 저장하는 메소드로써 강제로 종료되는 상황에 대비하여 Activity의 상태 정보를 저장 할 수 있다. 사용자가 화면을 강제로 회전하여 시스템이 Activity를 종료시키면, 종료 직전에 onSaveInstanceState 콜백 메소드가 호출되면서 Bundle 객체에 상태를 저장 할 수 있다.
onStop() 직전에 항상 호출된다.
2.2. onRestoreInstanceState()
onCreate() 또는 해당 메소드를 통해 Bundle 객체를 복원할 수 있다.
onStart() 이후에 호출되며 , Activity가 강제 종료된 후 다시 켜질 때만 불리게 된다 (ex 화면 회전)
참고자료
'안드로이드(Kotlin)' 카테고리의 다른 글
Kotlin 코틀린의 Context (0) | 2022.08.08 |
---|---|
Kotlin 코틀린의 Handler 와 Looper (0) | 2022.08.04 |
Kotlin 코틀린의 Intent와 Inflate (0) | 2022.08.04 |
Kotlin 코틀린의 Layout (0) | 2022.08.04 |
Kotlin 코틀린의 ViewModel (0) | 2022.08.03 |