- 안드로이드 4대 컴포넌트
- 액티비티(Activity) : 화면을 구성하는 가장 기본적인 컴포넌트
- 서비스(Service) : 백그라운드에서 동작하는 컴포넌트
- 컨텐츠 프로바이더(Contents Provider) : 응용 프로그램 간의(앱과 앱) 데이터를 상호 공유하기 위한 컴포넌트
- 브로드캐스트 리시버(Broadcast Receiver) : 단말기에서 발생하는 이벤트 수신을 위한 컴포넌트 (네트워크 상태, 배터리 상태, SMS수신, 스크린 꺼짐.. 등)
- 안드로이드 액티비티의 생명주기(C-S-R-P-S-D)
- onCreate
- onStart
- onResume
- onPause
- onStop
- onDestroy
- 생명주기 주의 사항
- 일정시간 동안 장치를 사용하지 않거나 안드로이드가 메모리를 회수해야 한다면 액티비티가 소멸될 수 있다.
- 메모리 회수가 필요하더라도 절대 실행중인 액티비티를 소멸시키지 않는다.
- 일시중지(paused), 중단(stopped) 상태의 액티비티만 destroy 됨. (일시중지나 중단의 경우에 onSaveInstanceState(....) 메서드가 호출됨)
- 일반적으로 onPause와 onSaveInstanceState()가 호출되는 것을 염두해 두고 코드를 작성하면 된다.
- 상황에 따른 생명주기
- 화면을 실행 했을 경우 : C - S - R
- 뒤로 버튼을 눌러 화면에서 없앨 경우 : P - S - D
- 홈 버튼을 눌러 화면을 닫았을 경우 : P - S
(에뮬레이터에서는 개발자옵션에서 '액티비티 유지 안함' 옵션을 설정하면 홈 버튼을 눌러도 2번과 같이 종료됨, 실제 장치는 Dev 도구 설치를 해야 사용가능)
- 3번 이후 recent 버튼을 눌러 다시 앱으로 돌아갈 경우 : S - R
- 화면을 회전했을 경우 : 2번 + 1번 (P - S - D - C - S - R)
* 화면이 회전되었을때 VIEW를 다시 create 해서 기존의 선택값 등이 초기화 된다. 그것을 방지하기 위한 방법은?
- onSaveInstanceState(Bundle bundle) 메소드를 오버라이드 하여 data를 저장하고 onCreate에서 불러온다.
예)
@Overrideprotected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(KEY_INDEX, mCurrentIndex);
super.onSaveInstanceState(outState);
outState.putInt(KEY_INDEX, mCurrentIndex);
}
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
}
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);
}
}
- Singletone 패턴을 활용하여 데이터를 관리한다.
- Application 객체를 만들어 관리한다.
* Bundle 객체에 데이터를 저장하거나 읽는 타입의 제약 사항은?
- 기본형(primitive) 데이터 타입
- Serializable 인터페이스를 구현하는 객체
- Parcelable 인터페이스를 구현하는 객체 (구현하기 번거롭지만, Serializable 보다 빠르며 권장됨)
댓글
댓글 쓰기