본문 바로가기

개발/Android

[Android] 액티비티(Activity)와 생명주기(Life Cycle)

반응형


액티비티란?


액티비티라는 단어의 의미인 '활동'이 나타내는 것처럼 액티비티는 전화를 걸고, 메일을 작성하고, 사진을 찍는 등 사용자가 어떤 활동을 할 때 실행되는 애플리케이션의 컴포넌트를 가리킵니다. 액티비티에는 윈도우가 있고, 그 윈도우에 텍스트나 이미지를 표시해 사용자 조작에 반응할 수 있습니다. UI가 없는 액티비티도 있지만 기본적으로 한 액티비티가 한 화면을 표시합니다. 


      import android.support.v7.app.AppCompatActivity

   import android.os.Bundle;

public class MainActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}

}



액티비티를 만들려면 우선 액티비티를 상속하는 클래스를 만들어야 합니다. 안드로이드 스튜디오의 마법사로 액티비티를 만들면 android.support.v7.app.AppCompatActivity를 상속한 위와 같은 클래스가 생성됩니다. AppCompatActivity는 액티비티를 상속하며, 액티비티를 상속함으로써 멀티리얼 디자인(Material Design)의 가이드라인에 따른 AppCompat 라이브러리를 제대로 활용할 수 있습니다.



액티비티의 생명주기


 




메서드명 

시점 

처리 예 

 onCreate

 생성 시 

 초기화 처리와 뷰 생성(setContentView 호출)등 

 onStart

 비표시 시 

 통신이나 센서 처리를 시작 

 onRestart

 표시 시(재시작만)

 보통은 아무것도 하지 않아도 된다.

 onResume

 최전면 표시

 필요한 애니메이션 실행 등의 호면 갱신 처리(※)

 onPause

 일부 표시(일시정지)상태

 애니메이션 등 화면 갱신 처리를 정지 또는 일시정지할 때 필요 없는 리소스를 해제하거나 필요한 데이터를 영속화

 onStop

 비표시(정지)상태

 통신이나 센서 처리를 정지

 onDestroy

 폐기 시

 필요 없는 리소스를 해제. 액티비티 참조는 모두 정리한다.


※ Android N부터 멀티윈도우가 도입됐습니다. 멀티윈도우를 지원하는 경우 애니메이션 실행 등 화면 갱신 처리의 정지는 onStop에서 합니다.


시스템 메모리가 모자랄 경우 시스템은 onStop, onDestroy를 콜백하지 않고 액티비티를 강제로 종료시켜 메모리를 확보할 때가 있습니다. 이러한 경우 데이터를 영속적으로 보존하려면 액티비티가 일시정지 상태로 전환되는 onPause에서 이를 처리할 필요가 있습니다. 


onCreate와 onDestroy, onStart와 onStop, onResume과 onPause를 쌍으로 해서 준비와 뒷정리, 혹은 시작과 종료(취소)하는 조합으로 생각하면 어떤 시점에 어떤 작업을 처리할지 상상하기 쉬워집니다.


예를 들어, onCreate에서 뷰를 만들면 onDestroy에서 해제합니다. 뷰는 액티비티가 폐기된 다음, 가비지 콜렉션에 의해서 자동으로 메모리에서 해제됩니다. 또한 onStart에서 위치 정보 취득을 시작했다면 onStop에서 만약 정보 취득을 완료하지 않았다면 취득을 정지하는 식입니다. 



onDestory에서 액티비티가 폐기되면 가비지 콜렉션이 메모리 영역에서 해제합니다. 단, 액티비티의 인스턴스가 다른 클래스에서 참조되고 있을 때는 폐기된 후에도 메모리에 남아 결국 메모리 누수가 발생합니다. 

(메모리 누수 관리에 대해서 추후 작성 p380)


-[참고자료] 안드로이드 개발 레벨업 교과서



반응형