본문 바로가기

Out-of date

[SDK 1.0] #03. Hello, Android!로 배우는 기초 - (3) Activity 집중공략

알립니다!!
현재 보시고 계신 강좌/글은 SDK 1.0를 기준으로 작성된 것입니다.
SDK 업데이트에 따라 변동사항이 있을 수 있으므로 새로운 SDK 버전을 기준으로 작성된 다른 글을 참고하시길 권합니다.



import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity{
public static void onCreate(Bundle icicle)
{
super.onCreate(icicle);
TextView HelloText = new TextView(this);
HelloText.setText("Hello, Android!");
setContentView(HelloText);

}
}

이번 글에서는 Activity클래스에 대한 것을 중점적으로 알아보겠습니다.
Activity 클래스를 확장하는 클래스는, 기본적으로 onCreate() 메소드를 오버라이드하게 됩니다.
onCreate() 메소드에 대해 간략하게 정리해보았습니다.

protected void onCreate(Bundle savedInstanceState)

Activity가 실행될 때 호출됩니다. Activity의 UI를 적용하기 위해 호출하는 setContentView(int)메소드, UI내의 위젯과 서로 정보를 주고받기 위한 findViewById(int) 메소드 등과 함께 Avtivity 초기화시 실행되는 메소드 중 하나입니다. Activity 클래스를 상속하는 클래스는 이 메소드를 super클래스의 메소드로 호출해야 합니다. 그렇지 않으면, 예외가 발생되게 됩니다.

onCreate메소드는 슈퍼클래스의 메소드로 호출해주어야 합니다. 따라서, 위의 코드에서도 super.onCreate(icicle)의 형태로 호출하였습니다. 왜 슈퍼클래스의 메소드로 호출해주어야 하는 지는 아직 자세하게 알아보지 못하였습니다. Documentation을 찾아봤는데, 자세한 내용을 아직 못찾았습니다(...) 찾는 대로 보강하도록 하겠습니다.

Bundle 객체가 상태 정보를 저장한다고 알아봤었습니다. 따라서, Bundle icicle에 상태정보들이 저장되고, Application을 실행할 때에, 혹은 종료했다가 다시 불러올 때 이 Bundle icicle의 상태정보를 불러오게 됩니다. Bundle에 대해서는 추후에 따로 다뤄보고, 여기서는 중요한 클래스인 Activity의 생명주기(Lifecycle)에 대해 알아보겠습니다.

Activity의 생명주기

액티비티는 액티비티 스택(activity stack)에 관리됩니다. 새로운 액티비디가 시작되면 액티비티 스택의 가장 위에 놓이게 되고, 활성 상태가 됩니다. 이전에 실행되고 있던 액티비티는 당연히 아래에 쌓이게 되고, 새로 시작된 액티비티가 종료되지 않는 한 다시 활성화되지 않게 됩니다.

액티비티의 상태는 총 4가지가 있습니다.

  • 액티비티가 현재 화면에서 실행되고(포커스를 가지고) 있다면, 활성화된 혹은 실행중인 상태입니다.
  • 액티비티가 포커스를 잃었으나, 아직 화면에 나타나 있을 경우 (즉, 화면에 꽉 차지 않는 액티비티 혹은 투명한 액티비티가 새로 실행되었을 경우), 일시정지 상태가 됩니다. 일시정지 되어있는 액티비티는 아직 종료되지 않은 상태로 남아 있지만, 메모리가 부족할 경우 강제 종료될 수 있습니다.
  • 액티비티가 다른 액티비티에 의해 완전히 가려지게 되면, 정지 상태가 됩니다. 이 때, 각종 상태정보들이 저장된 상태로 남아 있지만, 메모리가 부족할 경우 강제 종료되게 됩니다.
  • 액티비티가 일시정지 혹은 정지 상태일 경우, 시스템은 종료 의사를 묻거나 강제 종료를 통해 메모리를 확보하게 됩니다. 이렇게 된 액티비티가 다시 디스플레이 될 때에는 예전 상태를 그대로 불러오게 됩니다.



안드로이드 Documentation에 있는 순서도입니다. 간단하게 액티비티가 돌아가는 순서 및 과정을 보여주고 있습니다. 위의 그림에서 보면, 액티비티가 시작된 후 바로 onCreate()메소드가 호출되는 것을 알 수 있습니다. 즉, onCreate() 메소드가 액티비티의 실행에 있어서 필수적인 메소드임을 알 수 있습니다.