액티비티(Activity)는 안드로이드 시스템 구성 요소 중 사용자 인터페이스를 제공합니다. 안드로이드 구성요소, 즉 컴포넌트들은 안드로이드 시스템에 의해 관리되며 그 과정 중에 액티비티는 상태변화단계라고 말할 수 있는 생명주기를 가지고 있습니다.
안드로이드 시스템에서는 액티비티의 활동상태가 변하는 과정중에 관련된 콜백을 호출함으로 적절한 처리작업을 수행할 수 있습니다.
- onCreate() : 액티비티가 생성된 후 ON_CREATE 이벤트를 수신합니다.
- onStart() : 사용자에게 보이기 시작하는 단계로 포그라운드 실행 단계입니다. ON_START 이벤트를 수신합니다.
- onResume() : 사용자에게 완전히 보여지며 포그라운 단계입니다. 이제부터 사용자와 상호작용을 할 수 있는 활성화 된 상태입니다. ON_RESUME 이벤트를 수신합니다.
- onPause() : 액티비티가 포그라운드에서 백그라운드로 이동하는 단계이며 다른 액티비티나 팝업 다이얼로그에 의해 화면이 가려지는 시점, 즉 포커스르 잃는 시점으로 일시정지된 상태입니다. ON_PAUSE 이벤트를 수신합니다. 해당 주기는 안드로이드 시스템에서 액티비티를 강제로 종료하는 경우에도 이벤트 수신을 보장 받을 수 있는 단계이기도 합니다. 그러므로 해당 단계에서 데이터 또는 상태값 저장작업을 수행할 수 있습니다.
- onStop() : 액티비티가 사용자에게 완전히 보여지는 않는 단계로 백그라운 상태입니다. 액티비티가 종료될 때까지 액티비티의 인스턴스가 유지됩니다. ON_STOP 이벤트를 수신합니다.
- onRestart() : ON_STOP 상태에서 다시 액티비티가 실행되는 시점입니다. ON_RESTART이벤트를 수신합니다.
- onDestroy() : 액티비티가 종료되기 직전 상태입니다. finish()를 통하여 액티비티를 종료하는 경우 호출을 보장받을 수 있습니다. 그러나 사용자 드래그를 통한 사용자 앱 강제종료 시 또는 메모리 부족등으로 인한 시스템의 강제종료 시에는 onDestory()의 호출을 보장받을 수 없습니다. ON_DESTROY 이벤트를 수신합니다.
ActApple이라는 액티비티가 1개 있는 App을 생성하여 액티비티 생명주기에 포함되는 이벤트 콜백을 확인해 보겠습니다.
public class ActApple extends AppCompatActivity {
private static final String TAG = "ActApple";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_apple);
Log.d(TAG, "onCreate");
findViewById(R.id.act_apple_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
}
1. 앱을 실행합니다.
앱이 실행되면 onCreate() > onStart > onResume() 순으로 콜백 호출됩니다.
2. [홈] 버튼을 클릭하여 홈 화면으로 이동합니다.
백그라운드로 이동하는 과정에서 onPause() > onStop() 순으로 콜백 호출됩니다.
3. [작업보기]버튼을 클릭하여 앱을 다시 선택합니다.
다시 사용자와 상호작용할 수 있는 포그라운드로 이동하는 과정에서 onStart() > onResume()순으로 콜백 호출됩니다.
4. [액티비티 종료]버튼을 클릭하여 finish()를 호출합니다. finish()는 액티비티를 종료하는 함수로 onPause() -> onStop() > onDestroy()순으로 콜백이 호출하며 액티비티가 종료됩니다.
5. [작업보기]버튼을 클릭하고 사용자 드래그하여 실행앱을 종료합니다.
이번 경우에는 앱이 종료되는 순서에서 onPause() > onStop()이 콜백 호출되고 onDestory()는 호출되지 않았지만
onDestory()가 콜백호출되는 경우도 존재합니다. 이렇게 강제종료시에는 onDestory()가 반드시 호출된다는 보장을 할 수 없습니다.
마치며
액티비티 생명주기는 앱의 시작과 사용자의 앱 터치 및 사용, 그리고 앱의 종료되는 일련의 앱 상태 변화 과정입니다.
그러므로 상태 변화 단계에 맞는 액티비티 초기화, 데이터 저장, 할당 리소스의 해제작업을 정확하게 처리하여 앱 안정성 및 사용자에게 좋은 사용자 경험을 제공해야 됩니다.
'프로그래밍 > Android' 카테고리의 다른 글
Gradle 빌드 스크립트 (0) | 2023.04.14 |
---|---|
Density-independent pixels (0) | 2023.04.13 |
컨텍스트(Context) (0) | 2023.04.11 |
AndroidManifest.xml (0) | 2023.04.10 |
가상 디바이스(Virtual Device) 생성 (0) | 2023.04.10 |
댓글