듀다의 성장개발로그

[부스트코스] 안드로이드 프로그래밍 14 - 액티비티 수명 주기 본문

안드로이드/부스트코스

[부스트코스] 안드로이드 프로그래밍 14 - 액티비티 수명 주기

du-da 2020. 2. 21. 23:30

지난번에 액티비티에 대해서 포스팅을 했었는데요, 액티비티에는 실행부터 종료시까지 순차적으로 실행하는 메소드가 있습니다. 이것을 바로 '수명주기 메소드'라고 부릅니다. 수명주기 메소드에는 이미 익숙한 이름인 onCreate()에서부터 onStart, onStop, onDestroy, onPause, onResume등이 존재합니다. 

 

왜 수명주기 메소드가 필요할까요? 액티비티의 상태를 나타내기 위함입니다, 액티비티는 여러 개가 실행되어 있으면 액티비티 스택에 쌓이게 됩니다. 그 안에서 어떤 것이 실행중이거나 중지된 것인지 구분할 필요가 있겠죠? 액티비티의 대표적인 상태는 세 가지로, 중지(Stop), 일시 중지(Pause), 실행(Run)이 바로 그것입니다. 이 상태들은 언제 지정되는 것일까요?

 

이것은 마치 수학 공식처럼 항상 같은 패턴을 띕니다.

 

앱이 시작되면 onCreate onStart onResume 순으로 호출되고, 앱을 종료하면 onPause onStop onDestroy순으로 호출됩니다. 각각 화면이 포커스를 잃을 때, 뒤로 들어가며 중지될 때, 메머리에서 리소스가 없어질 때를 나타내지요.

 

이를 그림으로 나타내면 아래와 같습니다,

여담으로 on으로 시작하는 메소드를 '콜백 메소드'라고 하는데, 상태, 시점에 맞추어 시스템이 자동으로 호출하는 메소드입니다. 액티비티가 전면에 보일 때 onResume()를 호출하고

다른 액티비티가 전면에 보이게 되면, 기존 액티비티는 onPause()를 호출합니다.

 

수명주기가 사용되는 예를 들어 볼까요?

스마트폰으로 게임을 하던 중 전화가 왔다고 가정해 봅시다.

전화를 끝마칠 때까지 게임 정보가 고스란히 유지되면 참 좋겠지만, 만약 시스템 리소스가 부족해질 경우 그렇지 않을 수 있습니다. 그러면 사용자의 점수 정보가 소멸될텐데요, 이럴 때 어떻게 해야 할까요?

강의에서 설명한 해결책은 바로 onPause상태에서 현재 정보를 저장하는 것입니다.

onPause에 데이터를 저장하고 onResume에 복구하는 것이지요.

 

데이터의 저장 및 복구는 SharedPreferences 객체를 활용하면 쉽게 구현할 수 있습니다.

SharedPreferences는 간단하게 설정 정보를 저장하는 방법입니다. getSharedPreference 메소드 또는 preference manager를 통해서 데이터를 참조할 수 있습니다.

onPause()상태에서 SharedPreferences 객체에 데이터를 저장하고, SharedPreferences 객체에 저장된 데이터를 onResume()에서 불러와 사용하면 간단하게 데이터의 저장 및 복구를 구현할 수 있습니다.

 

부스트코스 관련 강좌 링크

http://www.edwith.org/boostcourse-android/lecture/17067/

 

[LECTURE] 1) 액티비티 수명주기 : edwith

들어가기 전에 한 화면이 보이고 있는데 다른 화면이 실행되면 기존 화면은 아래쪽으로 깔리게 되고 중지된다고 했습니다. 그런데 단말기는 전화기니까 여러분의 앱을 사용하고 있을 때도 ... - 부스트코스

www.edwith.org