태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

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

2008.11.30 16:30

알립니다!!
현재 보시고 계신 강좌/글은 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() 메소드가 액티비티의 실행에 있어서 필수적인 메소드임을 알 수 있습니다.

 

저작자 표시 비영리 동일 조건 변경 허락
신고

커니 Out-of date , , , , , , ,

  1. Blog Icon
    honeyfly

    쉬운 설명으로 어렵지 않게 잘 배우고 있습니다.
    고맙습니다.

  2. 감사합니다 :)

  3. 아 감동의 강좌입니다...ㅠㅠ
    헤매고 있었는데...

  4. 자세한 설명 감사합니다. 커니님 덕분에 쉽게 배우고 있습니다.

  5. 도움이 되셨다니 저야말로 뿌듯하네요 ^-^

  6. 감사합니다 안드로이드 공부를 하려했는데 이렇게 정리가 잘된 사이트를 보니, 공부가 저절로 되네요;;
    큰 도움 받고 가요^^*

  7. Blog Icon
    cashdow

    감사합니다. 첫 시작부터 자세히 기술해 주셔서 sdk까는 것부터 첫 헬로우 안드로이드까지 무난하게 환경 셋팅을 끝낼수 있었습니다.^^

  8. Blog Icon
    항기오빠

    activity manager, package manager 뭐하는놈인지좀 자세히 알수 없을까요 커니님 ㅠㅠ

  9. PackageManager는 시스템에 설치된 어플리케이션 정보에 접근할 수 있는 놈입니다.

    ActivityManager는 써보질 않아서 잘은 모르겠으나 API를 보니 현재 실행되고 있는 액티비티, 프로세스, 서비스(?) 에 대한 메모리 정보나 태스크 정보 등을 알 수 있도록 해 주네요.

  10. 이미 아셨는지 모르겠지만, super를 호출해야하는이유는 오버라이드 때, 기준에 코드가 지워져 서 그렇습니다.
    보통 저렇게 쓰는건 기존의 구현코드에서 +a 할 때 쓰더군요.(+_+뒤북이면 안되는데... ㅎㅎ; 항상 +_+많이 배우고 갑니다. 저도 대학와서 처음으로 언어 공부해봤는데 커니님도 대학때부터 했군요+_+)

  11. ㅎㅎ 오래간만에 뵙는것 같네요!
    제 기억으로 블로그 초창기(!)부터 뵜던 분 같은데...ㅎㅎ

    이 글을 어떻게 해야할지... 지금 고민이랍니다 ㅠㅠ
    이전 글이라서 더이상의 지원은 하지 않고 있는데.. 내리기는 참 모한.... ㅎㅎㅎ

  12. 내리지 마세요. 소중한 자료를+_+/
    분명 더이상의 지원하지 않는 글이라지만(제 생각은 아니지만), 도움이 되는 글이였습니다.

  13. Blog Icon
    꽃게장세트

    두번째 보고 있는데요.~ 좋습니다.

  14. Blog Icon
    duke

    어려운 용어를 어려운 용어로 풀이해서 어렵네요.
    본적으로 onCreate() 메소드를 오버라이드하게 됩니다.
    메소드가 그런 방법이란 뜻인가요?
    음.. 좀 말라이제 스럽네요.
    아 말라이제의 뜻은 쉬비리히 라는 뜻입니다. 이런 느낌.

  15. 메서드, 오버라이드 등의 용어는 안드로이드를 배우기 전에 자바를 배우실 때 배우셔야 하는 개념입니다. 안드로이드는 자바에 어느 정도 익숙하지 않으면 쉽게 접하기 어렵기에, 자바 문법을 먼저 공부하시는 것을 추천합니다.