Home » Android -4. Manifest 및 Activity 생명주기

Android -4. Manifest 및 Activity 생명주기

4.1. Manifest

  • 메니페스트 파일(AndroidManifest.xml)은 응용 프로그램의 구성과 관련된 모든 정보를 담고 있는 파일로, 응용 프로그램의 이름과 버전 정보, 응용 프로그램의 구성요소들, 실행에 필요한 사용 권한, 실행 방식 등 다양한 정보를 정의한다.
  • 이 파일은 매우 중요해서 ADT에서 매니페스트 파일을 위한 특수 편집기를 제공한다.

  • 예시
    [php]
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android=http://schemas.android.com/apk/res/android (1)
    package="com.hardrock.helloworld"
    android:versionCode="1" (2)
    android:versionName="1.0"> (3)

    <uses-permission android:name="android.permission.INTERNET"/> (4)

    <application android:icon="@drawable/icon" (5)
    android:label="@string/app_name">
    <activity android:name=".HelloWorldActivity" (6)
    android:label="@string/app_name">
    <intent-filter> (7)
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    </activity>
    </application>

    <uses-sdk android:minSdkVersion="7"/> (8)

    </manifest>
    [/php]

    번호 설명
    (1) 응용 프로그램의 패키지 이름 및 버전 정보 설정
    (2) 버전 코드 설정
    (3) 버전 설정
    (4) 퍼미션 등록
    (5) 응용 프로그램의 이름과 아이콘 설정
    (6) 하나의 액티비티 등록 및 설정
    (7) 인텐트 필터 설정
    (8) 안드로이드 sdk 버전 설정

4.2. Activity의 생명주기

  • 안드로이드 어플리케이션은 자신의 프로세스 수명을 직접 제어하지 않으며, 안드로이드 런타임이 각 어플리케이션의 프로세스와 그 안에 있는 각 activity를 관리한다.
  • 런타임이 프로세스와 activity의 종료와 관리를 다루는 동안, activity의 상태는 자신의 부모 어플리케이션 프로세스의 우선순위를 결정하는데 사용된다.
  • 어플리케이션 우선순위는 런타임이 어플리케이션과 그 안에 실행중인 activity를 종료시킬 가능성에 영향을 미치게된다.

activity가 생성되고 종료되는 과정 동안 activity는 4가지의 상태를 전이한다.

  • 활성(Active)

    • activity가 stack의 최상위에 있을 경우 이 activity는 현재 화면에 보이고 사용자 입력을 받는다.
    • 안드로이드는 무슨 일이 있어도 활성 상태에 있는 activity가 살아있도록 노력하며, 이 activity가 필요로 하는 리소스를 확보하기 위해 필요에 따라 stack의 아래쪽에 있는 activity들을 종료시킬 수 있다.
    • 다른 activity가 활성화되면 기존의 활성 activity는 일시 중지(Pause)된다.
  • 일지 중지(Pause)
    • 경우에 따라 activity는 화면에는 보이지만 포커스를 지니지 않을 수 있다.
    • 이 상태는 투명한 activity나 화면 전체를 사용하지 않는 activity가 그 앞에 활성화되어 있는 경우이다.
    • 일시 중지 상태가 되는 경우 activity는 활성 상태인것처럼 다뤄지지만 사용자 입력을 받지 않는다.
    • 극단적인 경우, 안드로이드는 활성 activity를 위한 리소스 확보를 위해 일시 중지 상태의 activity를 종료시킬 수 있을 것이다.
    • 만약 activity가 완전이 가려지게 되면 그 activity는 중지상태가 된다.
  • 중지(Stop)
    • activity는 화면에 보이지 않는다.
    • 이 activity는 모든 상태 및 멤버 정보를 메모리에 남기지만, 만약 시스템이 활성 activity를 위해 메모리를 요청할 경우 리소스 확보를 위한 정리 후보 1순위가 된다.
    • activity가 중지될 때는 데이터와 현재 UI상태를 저장하는 것이 중요하다.
    • activity가 화면 밖으로 나가거나 닫히고 나면 그 activity는 비활성 상태가 된다.
  • 비활성(Inactive)
    • activity는 종료되고 난 이후와 시작되기 이전 비활성 상태에 머문다.
    • 비활성 activity는 activity stack에서 제거되며, 화면에 다시 나타내기 위해서는 재시작되어야 한다.


그림 23. Activity의 생명주기

Activity 생명주기를 구성하는 메소드의 역할

메소드 설명
onCreate 액티비티가 최초 생성시에 호출된다. 초기화 설정을 하는 곳으로 보관된 상태의 액티비티가 있다면, 그 상태를 저장중인 Bundle 객체를 받는다. onStart() 메소드가 이어진다. 강제종료가 불가능하다.
onRestart 액티비티가 정지 후 다시 시작되기 바로 직전에 호출된다.
onStart() 메소드가 이어진다. 강제종료가 불가능하다.
onStart 액티비티가 사용자에게 보여지기 직전에 호출된다. 액티비티가 보여지게되면 onResume() 메소드가, 안보이게 되면 onStop() 메소드가 이어진다. 강제종료가 불가능하다.
onResume 액티비티가 사용자와 상호작용하기 직전에 호출된다 (스택의 최상위에 위치) onPause() 메소드가 이어진다. 강제종료가 불가능하다.
onPause 시스템이 다른 액티비티를 시작하려 할 때 호출된다.
일반적으로 데이터 저장을 하기에 좋은 곳이다.
소스코드의 속도가 빨라야 한다. 왜냐하면 이 메소드가 끝나기 전까진 다음 액티비티가 실행되지 않기 때문인데 액티비티가 되돌아오면 onResume(), 보이지않게되면 onStop() 이 이어진다. 강제종료가 가능하다.
onStop 액티비티가 사용자에게 보이지 않을때 호출 된다. 액티비티가 제거되거나 다른 액티비티가 실행되어 해당 액티비티를 덮어버렸을 때, 호출된다.
액티비티가 되돌아오면 onRestart(), 액티비티가 사라지면 onDestroy() 가 이어진다. 강제종료가 가능하다.
onDestroy 액티비티 삭제 직전에 호출된다. 액티비티가 받는 마지막 호출 메소드로 시스템이 메모리 확보를 위해 액티비티 인스턴스를 없애버려고 하거나, finish() 메소드가 호출되면 호출되는 메소드이다.
isFinishing() 메소드로 두 가지를 분기할 수 있다. onStart() 메소드가 이어진다. 강제종료가 불가능하다.