티스토리 뷰
Activity
• 화면을 구성하는 가장 기본이 되는 요소
• 자동으로 activity와 매칭되는 xml을 생성 + manifest에 등록
• 화면을 그리는 기능 + 화면에서 발생할 수 있는 일들을 처리할 수 있는 기능이 내장
• 앱이 실행될 때 최초로 실행되는 activity를 main activity 또는 launcher activity라고 한다.
1. Activity의 Lifecycle(생명주기)
• onCreate(savedInstanceState)
- 필수적으로 구현해야 한다.
- 생명주기 중에서 단 한 번만 발생한다. -> 단 한 번만 하면 되는 일들을 여기 구현한다.
- 초기 화면 그리기, 데이터 준비 등의 일을 한다.
* savedInstanceState : 사용자가 액티비티에서 바꾸었던 정보들을 저장해놓는 곳. 나중에 불러와서 다시 원래의 액티비티로 돌려놓을 수 있도록 한다.
• onStart()
- activty를 포그라운드로 보내 상호작용할 수 있도록 준비
* 포그라운드 : 사용 중일 때. = 사용자 눈에 보일 때.
- 매우 빠르게 완료가 된다. -> 너무 무거운 작업을 onStart에서 하면 Lifecycle에 문제가 생길 수 있다.
• onResume()
- 앱이 사용자와 상호작용이 가능한 상태
- 특정 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 이 상태에 머무른다.
* 특정 이벤트 : 전화가 온다, 기기 화면이 꺼진다.
* 앱에서 포커스가 떠난다 : 화면이 가려진다.
• onPause()
- 사용자가 activity를 떠나는 것을 나타내는 첫 번째 신호
- activty가 포그라운드에 있지 않다는 신호 -> (백그라운드 상태거나, 앱 위에 앱이 있는 상태)
- 잠시 작업 중지해야 하는 일들을 일시 중지한다. ex) 영상 일시 중지
• onStop()
- activity가 더 이상 사용자에게 표시가 되지 않는 상태
- 새로운 activity가 나오는 경우
- 화면이 가려지는 경우
- 사용자에게 보이지 않는 동안 앱은 리소스를 해제 해야한다.
ex) 영상 종료, GPS 종료
- 소멸되기 전 마지막으로 해야 할 일 등을 수행
ex) 저장
• onRestart
- onStop 상태에서 화면을 다시 켠 경우
- onStart로 돌아가기 전에 onRestart가 실행된다.
• onDestroy
- activty가 소멸되기 전에 호출된다.
ex) 앱 종료 등
- onStop에서 해제되지 않은 모든 리소스를 해제해야 한다.
* 기기 회전, 멀티 윈도우 모드로 전환 등은 activity를 소멸시키고 다시 켜는 것이다.
• 모든 사이클을 관리할 필요는 없고, 필요한 용도가 있을 때만 오버라이드해서 사용하면 된다.
* 안드로이드 OS가 activity를 직접 종료시키는 일은 없다.
- 다만, 프로세스(진행 중인 작업)는 종료가 가능하다.
2. Activity 생성
• app 모듈에 TestActivity.kt라는 빈 액티비티 생성.
- res -> layout 폴더에 TestActivity의 화면 구성 파일인 activity_test.xml 자동 생성됨.
- 모듈의 설계도 역할을 하는 AndroidManifest.xml 파일에도 activity가 자동 등록됨.
3. Activity 내부
package com.example.fastcampus
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class TestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
}
}
• TestActivity라는 액티비티가 어떤 동작을 할 것인지 정의하는 TestActivity 클래스가 선언되어 있다.
• 생성한 액티비티는 'Activity -> ComponentAcitivity -> FragmentActivity -> AppCompatActivity -> 생성한 액티비티'의 순서로 상속받으며, 이로인해 액티비티를 구현하기 위한 틀이 구성된다. 덕분에 개발자는 액티비티를 구현하기 위해 모든 코드를 하나하나 작성하지 않아도 안드로이드에서 제공해주는 규칙(수명주기 등)에 따라 코드를 작성하면 액티비티를 구현할 수 있다.
• 필수적으로 구현되어야 할 onCreate 함수가 구현되어 있다. 애플리케이션 사용 중 TestActivity가 실행될 때, 액티비티가 처음 생성되면서 실행될 것들을 구현한다.
• super.onCreate : 액티비티가 생성되어 동작하기 위해 구현해야 할 코드들이 적힌 부모 onCreate 함수를 불러온다.
• setContentView : 간단히 말하면 activity_test 레이아웃으로 화면을 구성하는 명령어이다.
• Log.d를 이용하여 MainActivity.kt의 생명주기를 확인해보면 다음과 같다.
package com.example.fastcampus
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("LifeCycle", "onCreate")
}
override fun onStart() {
super.onStart()
Log.d("LifeCycle", "onStart")
}
override fun onResume() {
super.onResume()
Log.d("LifeCycle", "onResume")
}
override fun onPause() {
super.onPause()
Log.d("LifeCycle", "onPause")
}
override fun onStop() {
super.onStop()
Log.d("LifeCycle", "onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.d("LifeCycle", "onDestroy")
}
override fun onRestart() {
super.onRestart()
Log.d("LifeCycle", "onRestart")
}
}
이 글은
패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online
강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.
'📱 Android > 💡 개념' 카테고리의 다른 글
[Android/개념] 6. Context(컨텍스트) (0) | 2022.10.28 |
---|---|
[Android/개념] 5. 앱 구성 요소(App Component) (0) | 2022.10.27 |
[Android/개념] 4. 뷰 컨트롤(View Control) (0) | 2022.10.24 |
[Android/개념] 2. Log(로그) (0) | 2022.10.21 |
[Android/개념] 1. 프로젝트 구조 (0) | 2022.10.20 |