티스토리 뷰

안드로이드의 Activity 생명주기에 대해서 알아보겠습니다. 영어로 표현하면 Activity Life Cycle로서 문자 그대로 Activity의 생명 즉, 살아있나 죽어있나 조금 살아있나?에 대한 내용입니다. 그렇다면 이 Activity라는 것은 무엇일까요?? 

우선 우리가 화면에서 볼 수 있는 Button 이나 TextView의 코드를 간단히 윗 부분만 살펴보겠습니다.


1
2
3
4
5
6
@RemoteView
public class Button extends TextView {
    public Button(Context context) {
        super((Context)null, (AttributeSet)null00);
        throw new RuntimeException("Stub!");
    }
cs


1
2
3
4
5
6
7
8
9
@RemoteView
public class TextView extends View implements OnPreDrawListener {
    public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0;
    public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1;
 
    public TextView(Context context) {
        super((Context)null, (AttributeSet)null00);
        throw new RuntimeException("Stub!");
    }
cs


Button은 TextView를 상속하고있고, TextView는 View를 상속하고 있는것을 볼 수 있습니다. 따라서 우리가 화면에서 보는 것들이 View라고 생각할 수 있습니다. Activity는 이러한 View를 놓을 수 있는 또는 그릴 수 있는 틀 즉, Canvase 라고 생각하시면 됩니다.


Activity가 이제 대략 무엇인지 알게되었습니다. 그럼 한 번쯤은 들어봤을 Activity LifeCycle 한국말로 액티비티 생명주기가 왜 중요한 것일까요?? 그냥 Activity 딱! 나타내고, 딱! 없애면 될것을 왜 생명주기라고 만들어놨을까요? 그건 바로 다양한 상황에 대해서 대응하기 위해서 입니다. 여기서 다양한 상황이라함은 만약 Application을 사용중 전화가 오면 어떻게 될까요? 딱! 나타내고, 딱! 없애는 것만 할 수 있다면 전화가오면 사용자의 앱은 딱! 없어지고 전화 앱이 딱! 나타나질 것입니다. 그렇다면 전화가 끊기면 어떻게 될까요? 없어져있는 앱을 다시 불러올 수는 없을 것입니다. 또 다른 예로 다른 Activity로 이동했는데 이전 Activity가 없어져있다면 재생성해서 불러오는것 말고는 방법이 없을 것입니다.


안드로이드 OS의 역활 중 하나는 시스템을 효율적으로 관리하는 것입니다. 시스템을 효율적으로 관리하기 위해서는 앞서 알아보았던 다양한 상황에 대해서도 효율적으로 관리할 수 있어야하므로, 아래와 같은 Activity 생명주기를 만듬으로서 시스템 자원 관리를 좀 더 효율적으로 할 수 있게되었습니다.

(  

 대표적으로 다음과 같은 상황을 위해서 만들어 졌습니다.

1. 사용도중 다른 Application으로 전활 될 경우 충돌 방지

2. 사용자가 Application을 나갔다가 돌아왔을 경우 진행 상태 손실 방지

3. Application을 잘 사용하지 않을 경우 리소스 낭비 방지

)

우선 구글에서 제공하는 안드로이드 Activity 생명주기는 다음과 같이 그림으로 표현됩니다.




하나 씩 살펴보도록 하겠습니다.


onCreate()

Activity가 생성 될 때 한 번 만 실행이 됩니다.(Activity에 View를 그리기위해서 준비하는 단계로 생각하면 좋을 것 같습니다.) onCreate()가 끝나면 onStart()를 호출합니다.


onStart()

View가 보이기 전에 호출이 됩니다.(Activity에 View를 보여주기 전에 그리는 단계로 생각하면 좋을 것 같습니다.) 다음으로 onResume()을 호출합니다.


onResume()

View가 보이고 나서 호출이 됩니다. 즉, 유저와 Activity가 서로 영향을 줄 수있는 단계로서 App이 가동되고있는 단계입니다.(Activity에 그려진 View를 보여주고 사용자와 소통하는 단계로 생각하면 좋을 것 같습니다.)


onPause()

Activity가 절반이 가려질경우 호출이 됩니다. 


onStop()

Activity가 다른 App에 의해 완전히 가려진 경우 또는 완전히 Activity가 종료된 경우 호출이 됩니다. Activity가 다시 보여질 경우 onRestart()가 호출되고 그 후 onCreate()가 아닌 onStart() -> onResume()의 단계로 실행하게 됩니다. 앱이 완전이 종료될 경우 onDestory() 가 호출됩니다.


여기서 위의 여러가지 상황을 대입해보겠습니다. 사용자가 앱을 사용하던 중 다른 앱이 실행되었을 경우(ex 전화앱) Activity가 완전히 가려졌으므로 onStop() 까지 호출 될 것입니다. 그 후 다시 사용자가 앱으로 돌아왔을 경우, onCreate()가 아닌 onStart()부터 시작함으로서 시스템 자원의 낭비를 줄일 수 있게됩니다.


간단하게 Activity의 생명주기에 대해서 알아보았습니다. 





댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday