액티비티의 생명주기

함수는 입력을 받아 출력을 하고, 프로그램은 실행을 하면 끝이있듯이 액티비티 또한 생성부터 소멸까지 생명주기(Lifecycle)가 존재 합니다. 

Activity 클래스는 생명주기와 관련된 몇가지 콜백 메소드를 갖습니다. 이러한 콜백을 통해 개발자가 액티비티가 어떻게 동작할 것인지, 사용자가 이 액티비티를 떠난다면 어떻게 할것인지, 다른 화면으로 갔다가 다시 이 액티비티로 진입하면 어떻게 할것인지에 대한 처리를 할 수 있습니다.

 

액티비티 생명주기 콘셉

액티비티 생명주기에서 가장 중요한 6가지 콜백을 소개 합니다:onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()

안드로이드 시스템은 액티비티의 상태가 변경 될때 특정 콜백 메서드를 호출합니다.

생명주기 관련 콜백 호출시기
onCreate() 액티비티가 최초 생성될때 한번만 호출 됩니다. 대부분 액티비티의 초기설정을 이곳에서 하게 됩니다. setContentView(int)를 하여 액티비티의 UI를 구성하고, findViewById(int)를 통해 뷰를 조작하고 상호작용하게 됩니다. 만약 액티비티가 재생성되는경우 이전상태값을 저장한 번들 객체가 전달됩니다.
onStart() 액티비티가 사용자에게 보이기 직전에 호출 됩니다.
onResume()

액티비티가 사용자와 상호작용을 하기 직전에 호출됩니다. 애니메이션을 시작하거나 카메라와 같은 장치를 실행할 때 좋은 시작점이 될 수 있습니다.

onPause() 다른 액티비티의 호출로 해당 액티비티가 백그라운드로 진입할때 호출됩니다. 애니메이션을 포함한 여러가지 CPU를 소모하는 작업들을 중단 시킬때 이곳에서 하면 적절합니다. 이 메서드는 무슨 일을 하든 빨리 끝내야 합니다. 왜냐하면 이 메소드가 리턴되기 전까지는 다음 액티비티가 실행되지 않기 때문입니다.
onStop() 액티비티가 더 이상 화면에 나오지 않습니다.
onDestroy() 액티비티가 소멸되기 전에 호출됩니다. 개발자가 finish()메소드를 호출해서 종료가 될 수도 있고, 시스템이 메모리를 확보하기 위해 액티비티를 일시적으로 종료시키는 것일 수도 있습니다. 이와 같은 두가지 시나리오는 isFinishing()메소드를 통해 구분할 수 있습니다.
onRestart() 액티비티가 중단 되었다가 다시 시작되기 직전에 호출됩니다. 이 뒤에는 항상 onStart() 가 호출 됩니다.

 

예제 코드

 

public class MainActivity extends AppCompatActivity {

    public static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e(TAG,"onCreate");
        // 액티비티가 생성되는 중
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG,"onRestart");
        //액티비티가 중단되었다가 다시 시작
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG,"onStart");
        //액티비티가 화면에 나타나기 시작
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG,"onResume");
        //액티비티가 화면에 나타나고 상호작용이 가능해짐
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG,"onPause");
        //다른 액티비티가 시작되려함, 이 액티비티는 중단되려하고 백그라운드로 들어갑니다.
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG,"onStop");
        //액티비티가 더 이상 화면에 나타나지 않음,중단된 상태
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG,"onDestroy");
        //액티비티가 종료되려고 합니다.
    }
}

 

본문의 예제는 github의 010 Activity_Lifecycle 모듈에서 확인 가능합니다.

질문은  band.us/@charlezz 또는 댓글로 남겨주시면 답변드리겠습니다.

카테고리: Tutorial

0개의 댓글

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.