본문 바로가기

Programming/Android

[Android] Activity Life Cycle(생명주기)

Activity Life Cycle (액티비티 생명주기)


  : Activity에는 Life Cycle이 존재한다. Life Cycle은 아래 그림과 같다.



 
 


* 각 함수들의 설명


Method

Description 

Killable? 

Next 

 onCreate()

 Activity가 처음 만들어질 때 호출되는 함수. 보통 create view, bind data to list 등을 onCreate()에서 한다. 그리고 이전 상태를 포함한 Bundle을 제공한다.

 No

 onStart()

 

 onRestart()

 Activity가 다시 시작되기 전에 Activity가 멈춘 후 호출되는 함수.

 No

 onStart()

 onStart()

 Activity가 User에게 보여질 때 호출되는 함수.

 No

 onResume() or onStop()

 

 onResume()

 Activity가 Focus를 다시 찾았을 때 호출되는 함수.

 No

 onPause()

 onPause()

 Activity 위에 다른 Activity 가 올라오거나 하여 focus 를 잃었을 때 호출되는 함수. 

 Pre-(HONEYCOMB)

 onResume() or onStop()

 onStop()

 완전히 화면을 벗어날 때 호출되는 함수. 예를 들어 홈키를 눌러서 홈화면으로 이동되면 호출된다.

 Yes

 onRestart() or onDestroy()

 onDestroy()

 Activity가 Destroy되기 전에 호출되는 함수. 

 Yes

 nothing

출처 : http://developer.android.com/intl/ko/reference/android/app/Activity.html


 ♠ Source Code

1. MainActivity

12345678910111213141516171819202122232425262728package com.example.dateutiltest;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
 
 
public class MainActivity extends ActionBarActivity implements RadioGroup.OnCheckedChangeListener{
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnLifeCycle = (Button) findViewById(R.id.btn_life_cycle);
        btnLifeCycle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, LifeCycleActivity.class);
                startActivity(intent);
            }
        });
    }
}

2. LifeCycleActivity

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869package com.example.dateutiltest;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
public class LifeCycleActivity extends Activity{
    private static int number = 0;
    private int currentNum = number;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        number++;
        currentNum = number;
        Log.i(currentNum + "번 Acitivty", "onCreate()");
        setContentView(R.layout.activity_main);
        TextView title = (TextView) findViewById(R.id.title);
        title.setText(currentNum + "번 Activity 입니다.");
        Button btnLifeCycle = (Button) findViewById(R.id.btn_life_cycle);
        btnLifeCycle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(LifeCycleActivity.this, LifeCycleActivity.class);
                startActivity(intent);
            }
        });
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(currentNum + "번 Acitivty", "onStart()");
    }
 
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(currentNum + "번 Acitivty", "onRestart()");
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(currentNum + "번 Acitivty", "onResume()");
    }
 
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(currentNum + "번 Acitivty", "onPause()");
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(currentNum + "번 Acitivty", "onStop()");
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(currentNum + "번 Acitivty", "onDestroy()");
        number--;
    }
}

☞ 예제 화면

① Main Activity 실행




② LifeCycle 알아보기 버튼 클릭 후 실행된 1번 Activity




③ 1번 Activity 실행되었을 때 호출 되는 함수 순서 : onCreate() → onStart() → onResume()



④ 1번 Actvity에서 LifeCycle 버틀 클릭 후 생성된 2번 Activity



⑤ 1번 Activity에서는 onPause() 함수 호출. 2번 Activity에서는 onCreate() → onStart() → onResume() 순서대로 실행. 그리고 1번 Activity는 onStop()함수를 호출.


⑥ 2번 Activity에서 Back Key를 눌렀을 경우 : 2번 Activity에서 onPause()함수를 호출하고,
1번 Activity에서는 onRestart() → onStart() → onResume() 순서로 실행되고,
2번 함수는 onStop() → onDestroy() 순서로 Activity가 종료된다.



⑦ 1번 Activity에서 Back Key를 눌렀을 경우 : 1번 Activity에서 onPause()함수를 호출하고,
Main Activity에서는 onRestart() → onStart() → onResume() 순서로 실행되고(Log를 안찍어서 안보임),
1번 함수는 onStop() → onDestroy() 순서로 Activity가 종료된다.