로그인 바로가기 하위 메뉴 바로가기 본문 바로가기
난이도
심화

안드로이드 앱 프로그래밍

임시 이미지 정재곤
http://www.boostcourse.org/mo316/notice/2573
좋아요 1436 수강생 20099
아래의 글은 BOOSTER 서포터즈로 활동했던 리미(dusdk***)님이
작성한 부스트코스 후기입니다.
여러분들의 성원에 더 노력하는 부스트코스가 되겠습니다.
감사합니다.
******************************************
1)링크: https://blog.naver.com/dusdkfla/221812455563
2)작성날짜: 20/02/13
<본문작성>

안녕하세요~

이번엔 안드로이드 생명주기(수명주기)에 대해 포스팅해보려 합니다.

액티비티는 안드로이드 시스템에 관리되기 때문에 언제라도 중지되거나 메모리에서 삭제될 수 있습니다.

예를 들어, 전화가 오는 경우 통화를 우선으로 처리해야 하기 때문에 메모리가 모자란다면 여러분의 앱을 임의로 종료시킬 수 있습니다.

그런데 이럴 때 아무런 예고 없이 앱을 종료시키면 사용자가 입력했던 데이터나 앱의 상태는 모두 사라지고 말 겁니다.

수명주기는 앱의 상태에 맞추어 여러분이 어떤 기능을 동작시키는 코드를 넣을 수 있도록 해 줍니다.

수명주기는 화면의 상태에 따라 달라지는데 각각의 상태에 따라 자동으로 호출되는 메소드가 다릅니다.


생명주기(LifeCycle)

일단 액티비티의 상태는 3가지가 있습니다.

실행(Running) - 화면 상에 액티비티가 보이면서 실행되어 있는 상태. 액티비티 스택의 최상위에 있으며 포커스를 가지고 있음

일시 중지(Paused) - 사용자에게 보이기는 하지만 다른 액티비티가 위에 있어 포커스를 받지 못하는 상태. 대화상자가 위에 있어 일부가 가려져 있는 경우에 해당함

중지(Stopped) - 다른 액티비티에 의해 완전히 가려져 보이지 않는 상태

액티비티의 상태들의 흐름을 그림으로 봅시다.

오른쪽 그림이 왼쪽 그림의 조금 더 자세한 그림입니다.

위 그림들을 요약하자면,

화면이 눈에 보이게 되는 과정에서 onCreate, onStart, onResume 메소드가 차례대로 호출되고,

화면이 없어지는 과정에서 onPause, onStop, onDestroy 메소드가 호출됩니다.

데이터의 복구

onPause() 메소드는 액티비티가 눈에 보이지 않게 될 때 항상 호출되므로 이 메소드에서 정보를 저장하는 방법을 구현할 수 있습니다.

protected void onPause() { super.onPause(); SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString("name", "소녀시대"); editor.commit(); }

SharedPreferences 객체에 name이라는 이름으로 "소녀시대"라는 정보를 저장했습니다.

반대로 onResume() 메소드는 액티비티가 눈에 보이게 될 때 항상 호출되므로 이 메소드 안에 정보를 불러오는 코드를 작성하면 액티비티를 닫을 때 저장한 정보를 다시 불러올 수 있습니다.

protected void onResume() { super.onResume(); SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE); if(pref!=null){ String name = pref.getString("name",""); Toast.makeText(this, "복구된 이름 : "+name, Toast.LENGTH_LONG).show(); } }

이 방법 이외에도 onSaveInstanceState 메소드와 onRestoreInstanceState 메소드를 사용하는 방법도 있습니다.

액티비티가 중지되기 전에 onSaveInstanceState 메소드가 호출되는데 이 안에서 임시로 데이터를 저장할 수 있습니다.

저장할 때는 번들 객체를 만들어 저장하는데, 이 번들 객체는 액티비티가 다시 만들어질 때 호출되는 onCreate나 화면에 다시 보일 때 호출되는 onRestoreInstanceState 메소드의 파라미터로 전달됩니다.

따라서 파라미터로 전달된 번들 객체의 데이터를 이용하면 화면에 원래의 데이터를 복구할 수 있습니다.

 

*********************************************