728x90
반응형
2.2 Activity (액티비티)
액티비티(Activity)
: 사용자 인터페이스 화면을 만들기 위해 필요한 기본적인 컴포넌트
- Activity 클래스를 계승하여 확장한다.
- View를 사용해 사용자 상호작용을 제공한다.
- 모든 화면에 대해 각각 새로운 Activity를 만들어야 한다.
- Activity의 종류
- 대부분의 Activity는 화면 전체를 차지
- 반투명한 Activity
- 떠 있는 Activity
- 다이얼로그 박스를 사용하는 Activity
(1) Activity 만들기
- Activity 클래스 상속: extends Activity (→ AppCompactActivity)
- Activity의 라이프 사이클에 맞춰 호출되는 메소드 구현:
- onCreate(): Activity 생성시에 호출, View를 이용하여 화면 구성(코드로 구현하거나 레이아웃용 xml 이용)
- 레이아웃 작성
- MyView를 이용하여 화면 설정
- Resource(res)를 이용하여 화면 layout 설정(XML 이용, 프로그램과 Data 분리)
- Manifest에 Activity 추가: activity 태그를 가지지 않은 Activity를 시작될 수 없다.
- 동작(action)과 범주(category) 태그 작성(정의)
(2) 애플리케이션 스택
애플리케이션이 시작되면 메인화면을 나타내는 액티비티가 스택에 쌓이고 새로운 액티비티가 시작될 때마다 이를 스택의 맨 위에 순서대로 쌓는다. 스택의 맨 위에 있는 액티비티가 현재 사용자가 보고 있는 화면을 나타내고 이를 활성화 또는 포그라운드 액티비티라고 한다.
활성화 상태의 액티비티 위에 새로운 액티비티가 쌓이면 이전의 액티비티는 비활성(또는 백그라운드) 액티비티가 되고 새로운 액티비티가 활성 액티비티가 된다.
활성 상태의 액티비티는 뒤로가기 버튼이나 명시적인 종료 구문에 의해 스택에서 제거되고 바로 밑에 있던 액티비티가 다시 활성 상태가 된다.
액티비티는 애플리케이션 전반에 걸쳐서 활성화, 비활성화 상태가 반복되며 안드로이드는 리소스 확보를 위해 어떤 프로세스를 종료시킬지 액티비티 스택을 기준으로 결정한다.
1) 실행되는 Unit(단위)
- Instance(인스턴스) : 실체화 (▶ 메모리 공간을 확보하는 것)
- Java에서의 클래스(class), 객체(object), 인스턴스(instance)
- 프로세스 Process / Task / Transaction
- Servlet / Applet / Midlet / Activity ▶목적에 따라 나오는 실행 유닛이 있다.
안드로이드(Android)에서는 하나의 액티비티가 하나의 인스턴스로, 따라서 안드로이드에서의 실행 유닛은 액티비티이다.
(2) 액티비티(Activity)의 상태와 메소드
1) 액티비티의 상태
- 활성(Active): 스택의 맨 꼭대기에 있을 경우 화면에 보이고 포커스를 가지며 사용자 입력을 받는 상태
- 일시 중지(Paused): 화면에 보이지만 포커스가 없어 사용자 이벤트를 받지 못하는 상태
- 중지(Stopped): 화면에 보이지 않을 경우. 프로세스 종료 1순위
- 비활성(Inactive): 액티비티가 시작되기 이전과 종료된 후의 상태. 스택에서 제거됨.
2) 액티비티 메소드 (Activity Method)
구성요소 | 기능 |
onCreate() | - Activity가 생성될 때 처음 호출 - 리소스 초기화 - findViewById(int) 메소드 호출: Widget 검색 - setContentView(int) 메소드 호출: Widget 화면 출력 - 시스템이 활동의 새 인스턴스를 생성하든, 이전 인스턴스를 재생성하든 상관없이 호출되므로 읽기를 시도하기 전에 번들 상태가 null인지 반드시 확인해야 한다. null일 경우, 시스템은 이전에 소멸된 활동의 인스턴스를 복원하지 않고 새 인스턴스를 생성한다. |
onStart() | - Activity 화면 출력 시 호출 - 가시 수명 시작 시 호출됨. |
onResume() | - Activity stack의 Top에 위치 - Activity 화면 출력 및 입력 처리 시 호출 - 활성 수명 시작 시 호출됨 - 일시 중지된 모든 UI 업데이트나 스레드 혹은 Activity에 의해 필요하지만 Activity가 비활성화되면서 일시 중단된 처리를 재개한다. |
onPause() | - Activity1 → Activity2 : Activity1의 내용 저장 - 데이터 저장, animation 중지, CPU 점유 작업 중단 등 수행 - 활성 수명의 끝에서 호출된다. - Activity가 활성 상태의 foreground Activity가 아닐 경우 업데이트될 필요가 없는 UI 업데이트나 스레드 혹은 CPU를 많이 사용하는 처리를 일시 중단한다. |
onStop() | - 더 이상 Activity가 stack의 Top에 위치하지 않으므로 Activity 출력 안됨 - 가시 수명의 끝에서 호출된다. - 남아있는 UI 업데이트나 스레드 혹은 액티비티가 화면에 보이지 않을 때 필요하지 않은 처리를 일시 중단한다. - 이 메소드가 호출되고 난 뒤에는 프로세스가 종료될 가능성이 있으므로 바뀐 모든 내용과 상태 변화를 지속시킨다. |
onDestroy() | - 시스템에서 Activity 제거 - 전체 수명의 끝에서 호출한다. - 스레드를 종결하고 데이터베이스 연결을 닫는 등 모든 리소스를 해제한다. |
onRestoreInstanceState() | - 시스템에 의해 강제 종료 후 복원 시 호출 - 액티비티의 이전 UI 상태 복구 작업 구현 - onSaveInstanceState에서 저장된 Bundle 객체가 전달됨로 이를 이용하여 이전 상태 복구 - 시스템이 onStart() 메서드 다음에 호출한다. 시스템은 복원할 저장 상태가 있을 경우에만 onRestoreInstanceState()를 호출한다. 따라서 Bundle이 null인지 확인할 필요가 없다. |
onRestart() | - stop 후에 포그라운드로 다시 돌아올 때 onCreate()가 호출되지 않는 상황에서 호출 - onCreate()를 호출하면 초기화되지만, onRestart()를 호출하면 초기화되지 않음. - onStop()에서 중지했던 애니메이션, 스레드, 타이머, 서비스, UI 업데이트 작업 재개 |
onSaveInstanceState() | - 비활성화 되거나 백그라운드로 전환 시 가장 먼저 호출 - 메시지 작성과 같은 저장되지 않은 현재의 UI 상태 저장 작업 구현. - 체크 버튼 상태, 사용자 포커스, 저장되지 않은 입력 데이터 등을 위하여 onCreate()나 onRestart() 호출 후에 호출 - 프로세스가 종료되거나 재시작될 경우 이 Bundle이 onCreate에 전달될 것이다. |
(3) Activity Life Cycle (활동 수명 주기)
1) 액티비티(Activity)의 상태 변화에 따른 메소드 호출
2) Activity의 Life Cycle 상태에 따른 Activity Stack
- 포그라운드 액티비티 (Foreground activity)
- 최상위 화면의 activity로 가장 중요한 프로세스
- 메모리 부족 시 마지막으로 제거
- Visible activity
- 화면에 보이는 activity로 forground activity가 아닌 activity
- 백그라운드 액티비티 (Background activity)
- 화면에 보이지 않고 stop 상태의 activity
- 메모리 부족 시 foreground, visible activity보다 먼저 제거
- onSaveInstanceState(Bundle savedInstanceState) method 호출 ⇒ 중요 데이터 저장
- onCreate() method에서 savedInstanceState parameter를 이용하여 Background activity 제거 전의 상태로 복귀 가능
- Empty Process
- Service, Broadcast Receiver 클래스와 같이 activity, application component도 없는 프로세스
- 메모리 부족시 즉시 제거2.2 Activity: 사용자 인터페이스 화면을 만들기 위해 필요한 기본적인 컴포넌트
참고)
https://developer.android.com/guide/components/activities/intro-activities?hl=ko
https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko
728x90
반응형