Android 생명주기

안드로이드에서 액티비티는 어플리케이션 컴포넌트로서, 창이 하나씩 주어져 이곳에 사용자 인터페이스(UI)를 끌어올 수 있습니다.

액티비티의 생명주기 관리 콜백 메서드를 구현하여 액티비티의 수명 주기를 관리하는 것은 강력하고 유연한 애플리케이션 개발에 대단히 중요한 역할을 합니다. 액티비티의 수명 주기는 다른 액티비티와의 관계, 액티비티의 작업과 백 스택 등에 직접적으로 영향을 받습니다.

재개됨(Resumed) 화면 상에 액티비티가 보이면서 실행되어 있는 상태 액티비티 스택의 최상위에 있으며 포커스를 가지고 있음

일시정지됨(Paused) 사용자에게 보이기는 하지만 다른 액티비티가 위에 있어 포커스를 받지 않는 상태, 대화상자가 위에 있어 일부가 가려지는 경우에 해당

정지됨(Stopped) 다른 액티비티에 의해 완전히 가려져 보이지 않는 상태

액티비티는 위에 3가지 상태를 가집니다.

액티비티가 처음 실행되어 메모리에 만들어지는 과정이 onCreate() 에 해당합니다. 이후 onStart(), onResume() 메소드를 거쳐 실행(Running) 상태가 되고, 다른 액티비티가 상위에 오게 되면 onPause() 가 호출되면서 일시정지(Paused) 상태로, onStop() 을 통해 중지(Stopped) 상태로 변하게 됩니다. 마지막으로 앱을 종료하여 메모리에서 없어질 경우에 onDestroy() 메소드가 호출됩니다.

onCreate()
액티비티를 생성할 때 호출 액티비티의 필수 구성 요소를 초기화 setContentView()를 통해 UI 레이아웃을 정의 번들 객체를 참조하여 이전 상태를 복원 가능 onStart()
액티비티가 화면에 보이기 바로 전에 호출 onResume()
액티비티가 사용자와 상호작용하기 바로 전에 호출 onRestart()
액티비티가 중지된 이후에 호출되는 메소드로 다시 시작되기 바로 전에 호출 onPause()
사용자가 액티비티를 떠난다는 첫 번째 신호 저장되지 않은 데이터를 저장소에 저장하거나 진행 중인 작업을 중지하는 등의 기능을 수행 (사용자가 돌아오지 않을 수 있기 때문에) 액티비티가 이 상태에 들어가면 액티비티 강제종료 가능 onStop() :액티비티가 사용자에게 더 이상 보이지 않을 때 호출 액티비티가 소멸되거나 다른 액티비티가 가릴 때 호출 onDestroy() :액티비티가 소멸되어 없어지기 전에 호출 어플리케이션에 의해 종료되거나 강제종료 시에 호출

코드 예제

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(MainActivity.this, "onCreate ...", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onStart() {
        super.onStart();
        Toast.makeText(MainActivity.this, "onStart ...", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onResume() {
        super.onResume();
        Toast.makeText(MainActivity.this, "onResume ...", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onPause() {
        super.onPause();
        Toast.makeText(MainActivity.this, "onPause ...", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onStop() {
        super.onStop();
        Toast.makeText(MainActivity.this, "onStop ...", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Toast.makeText(MainActivity.this, "onDestroy ...", Toast.LENGTH_SHORT).show();
    }
}

수명주기 메서드가 호출되는 되는 과정은 다음과 같습니다.

  1. 생성할 때 : onCreate() → onStart() → onResume()
  2. 소멸할 때 : onPause() → onStop() → onDestroy()

Tip) finish() 메소드 : finishActivity() 메소드를 통해 해당 액티비티를 명시적으로 종료할 수 있으나, Android 에서는 시스템이 액티비티의 수명을 대신 관리해주므로 직접 종료하지 말 것을 권장