MyCloud

[안드로이드] 액티비티의 수명주기 본문

Programming/Android

[안드로이드] 액티비티의 수명주기

Swalloow 2016. 4. 16. 16:28



안드로이드 액티비티의 상태


안드로이드에서 액티비티는 어플리케이션 컴포넌트로서, 

창이 하나씩 주어져 이곳에 사용자 인터페이스(UI)를 끌어올 수 있습니다.


한 액티비티가 새로운 액티비티의 시작으로 인해 중단된 경우, 

이 상태 변경은 수명주기 콜백 메서드를 통해 알려집니다.

따라서, 액티비티가 가질 수 있는 상태와 이 상태 변화에 따른 콜백 메서드에는 

어떤 것이 있는지 수명주기를 통해 알아보겠습니다.


 상 태

 설 명 

 실행 (Running)

 화면 상에 액티비티가 보이면서 실행되어 있는 상태

 액티비티 스택의 최상위에 있으며 포커스를 가지고 있음

 일시중지 (Paused)

 사용자에게 보이기는 하지만 다른 액티비티가 위에 있어

 포커스를 받지 않는 상태, 대화상자가 위에 있어 일부가

 가려지는 경우에 해당

 중지 (Stopped)

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


액티비티의 상태는 위의 표와 같이 실행, 일시중지, 중지의 상태를 가집니다.








안드로이드 액티비티의 수명주기


다음 그림은 액티비티의 수명주기입니다.



액티비티가 처음 실행되어 메모리에 만들어지는 과정이 onCreate() 에 해당합니다.

이후 onStart(), onResume() 메소드를 거쳐 실행(Running) 상태가 되고,

다른 액티비티가 상위에 오게 되면 onPause() 가 호출되면서 일시정지(Paused) 상태로, 

onStop() 을 통해 중지(Stopped) 상태로 변하게 됩니다.

마지막으로 앱을 종료하여 메모리에서 없어질 경우에 onDestroy() 메소드가 호출됩니다.


 상태 메소드

 설 명 

 onCreate()

 액티비티를 생성할 때 호출

 액티비티의 필수 구성 요소를 초기화

 setContentView()를 통해 UI 레이아웃을 정의

 번들 객체를 참조하여 이전 상태를 복원 가능

 onStart()

 액티비티가 화면에 보이기 바로 전에 호출

 onResume()

 액티비티가 사용자와 상호작용하기 바로 전에 호출

 onRestart()

 액티비티가 중지된 이후에 호출되는 메소드로

 다시 시작되기 바로 전에 호출

 onPause()

 사용자가 액티비티를 떠난다는 첫 번째 신호

 저장되지 않은 데이터를 저장소에 저장하거나

 진행 중인 작업을 중지하는 등의 기능을 수행

 (사용자가 돌아오지 않을 수 있기 때문에)

 액티비티가 이 상태에 들어가면 액티비티 강제종료 가능

 onStop()

 액티비티가 사용자에게 더 이상 보이지 않을 때 호출

 액티비티가 소멸되거나 다른 액티비티가 가릴 때 호출

 onDestroy()

 액티비티가 소멸되어 없어지기 전에 호출

 어플리케이션에 의해 종료되거나 강제종료 시에 호출


* finish() 메소드 : finishActivity() 메소드를 통해 해당 액티비티를 명시적으로 종료할 수 있으나,

Android 에서는 시스템이 액티비티의 수명을 대신 관리해주므로 직접 종료하지 말 것을 권장







안드로이드 수명주기 메서드 구현


위에서 살펴본 수명주기 메서드는 다음과 같이 오버라이딩 해서 사용합니다.

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();
}
}
위에서 설명한 것처럼 onCreate() 에서 Bundle savedInstanceState 를 통해 이전 상태를 불러오고,
setContentView(R.layout.activity_main) 을 통해 사용자 인터페이스 레이아웃을 정의합니다.
이후에 Button 같은 구성요소가 있다면 findViewById() 를 통해 바인딩 해야 합니다.

수명주기 메서드가 호출되는 되는 과정은 다음과 같습니다.
1. 생성할 때 : onCreate()  onStart()  onResume()
2. 소멸할 때 : onPause() → onStop()  onDestroy()




Comments