반응형

한 화면이 보이고 있는데 다른 화면이 실행되면 기존 화면은 아래쪽으로 깔리게 되고 중지된다고 했습니다.

그런데 단말기는 전화기니까 여러분의 앱을 사용하고 있을 때도 전화를 받을 수 있도록 만들어줍니다.

그렇다면 하나의 액티비티가 화면에 보이거나 보이지 않게 되었을 때 무언가 해주어야 하는 일이 있지 않을까요?

액티비티 수명주기는 액티비티의 상태가 변할 때마다 안드로이드 시스템에서 각 상황에 맞는 메소드를 자동으로 호출해줌으로써 여러분이 직접 각각의 상태에 맞는 코드를 넣어 액티비티의 상태에 따라 제어 할 수 있게 해줍니다.

액티비티의 수명주기에 대해 알아봅시다.




수명주기

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

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

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

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

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

어떤 과정을 거치는지를 그림으로 표현하면 다음과 같습니다.

좀 더 상세하게 구분하여 표현하면 다음과 같습니다.


먼저 화면이 눈에 보이게 되는 과정에서 onCreate, onStart, onResume 메소드가 차례대로 호출됩니다.

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

 

데이터의 복구

수명주기 메소드가 자동 호출되도록 만든 이유는 사용자가 입력했던 데이터를 복구하거나 상태 정보를 복구할 수 있도록 만들기 위해서입니다.

따라서 화면이 없어질 때 데이터를 임시로 저장해두었다가 화면이 다시 보일 때 복구할 수 있어야 하는데 이때 사용되는 메소드가 onPause와 onResume입니다.

onPause 메소드는 화면이 눈에서 보이지 않게 될 때 항상 호출되므로 이때 데이터를 저장해둘 수 있습니다.

데이터는 SharedPreferences를 이용하면 간단하게 저장할 수 있습니다.

SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString( "name", "mike");
editor.commit();

 onResume 메소드는 화면이 다시 보일 때 항상 호출되므로 이때 저장해 둔 데이터를 가져와 화면에 설정할 수 있습니다.

SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE);
if ((pref != null) && (pref.contains("name")) ){
    String name = pref.getString("name", "");
    nameInput.setText(name);
}

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

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

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

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


반응형

'안드로이드 개발 > 부스트코스(안드로이드 프로그래밍)' 카테고리의 다른 글

브로드캐스트  (0) 2019.03.10
서비스  (0) 2019.03.10
부가데이터  (0) 2019.03.08
인텐트(Intent)  (0) 2019.03.08
화면 구성과 화면 간 전환  (0) 2019.03.08
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기