Activity 생명주기
★액티비티는 다음의 생명주기를 따른다
- onCreate() : 액티비티가 최초로 생성 된다. UI를 초기화 하는데 사용된다.
- onStart() : 액티비티가 사용자에게 보이기 직전상태이다.
- onResume() : 액티비티가 화면의 전면에 표시되었다. 사용자가 UI를 사용할 수 있다.
- onPause() : 다른 액티비티가 현재 액티비티를 일부 덮었을 때 호출된다. 즉 화면에는 보이지만 상호작용은 할 수 없는 상태이다 .사용자가 해당 액티비티로 돌아오지 않을 것을 감안해 저장해야 하는 데이터를 저장하거나 진행중인 스레드를 종료하기에 적당하다.
- onStop() : 다른 액티비티가 이 액티비티를 완전히 덮어 더 이상 사용자에게 보이지 않을 때 호출된다. 액티비티 스택에서 다른 액티비티에게 덮혀 보이지 않는 상황이다. onStop()상태에서 사용자가 이 액티비티로 다시 돌아온다면 onCreate()대신 onRestart()가 호출되고 이후 onStart()가 호출 된다.
- onDestroy() : 액티비티가 완전 종료되었다.
★메모리가 부족하여 Android 시스템이 액티비티를 강제종료 하는 경우 onStop()과 onDestroy()의 호출을 보장할 수 없다. 즉 onPause()와 그 이후의 상태에 있는 액티비티는 시스템에 의해 언제든 파괴될 수 있다.
★액티비티를 다이얼로그가 가렸을 때는 onPause()가 실행될 것 같지만 다이얼로그도 액티비티의 일부이기 때문에 생명주기에는 변화가 없다.
★back버튼으로 앱에서 나온경우는 onDestroy()까지, home버튼을 누른 경우는 onStop()까지만 호출 된다.
★최근 사용한 앱리스트에 앱이 존재한다고 해서 그 앱과 액티비티가 반드시 살아있는 것은 아니다.
★액티비티 위에 배경이 투명한 액티비티가 실행되면 onPause()까지만 호출된다.
★액티비티가 예기치 못하게 종료되었을 경우 사용중이던 데이터를 지켜야 하는 경우가 있다. 사용자가 무엇인가 입력중이거나 한 경우인데 이럴 때를 대비해 onSaveInstanceState()와 onRestoreInstanceState()를 사용할 수 있다. onSaveInstanceState()는 onPause() 이후, onRestoreInstanceState()는 onStart() 이후에 호출된다.