Activity
앱 제일 앞에서 사용자와 소통을 하기위해, UI를 제공하고 화면을 구성하는 요소.

위의 그림은 콜백 함수 위주로 표현을 한 것이고, 아래의 그림은 Activity의 상태 위주로 표현한 것이다.

onPause()는 Activity가 부분적으로 보이는 상태일 때의 콜백이다. 주로 팝업창이 발생할 경우 팝업창 뒤의 Activity에서 발생하며, 상태바와는 관계 없다.
onStop()은 Activity가 아예 보이지 않는 상태의 콜백이며, 다른 앱이 실행될 때가 그 예이다. onStop()으로 진입하려면 무조건 onPause()를 거쳐야한다.
onPause()와 onStop()에서 앱이 죽는 경우는 메모리가 부족할 때이다. 해당 앱보다 사용자에게 보이는 앱이 더 중요해서 시스템이 해당 앱을 죽인다.
해당 Activity가 아예 안보이는 지 부분적으로 안보이는 지 판단하는 것은 Compositing이다. 이는 화면을 그릴 때 레이어별로 Activity의 어떤 부분을 그려야할 지 다른 Activity에 가려서 안그려도 될 지 판단하고 그린다.
onCreate() 후에는 단순히 Activity의 생성일 뿐 당장 보이는 것이 아니다. onStart() 후에 화면이 보이므로, 비용이 큰 작업은 onCreate()에서 하지 않아야 한다.
앱이 죽을 것을 대비해 Activity의 상태를 저장하는 함수를 지원한다. onSaveInstanceState()는 onPause()와 onStop() 이후에 자동으로 호출된다. 이때 Bundle이 활용하며 Key-Value로 저장하고, onCreate()와 onRestoreInstanceState()에서 해당 데이터를 다시 확인할 수 있다.
static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call the superclass first
if (savedInstanceState != null) {
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
} else {
// Probably initialize members with default values for a new instance
}
...
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
}