일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- dynamic programming
- 2020
- C++
- 프로그래밍
- 강의
- 2021
- 알고리즘
- python
- 다이나믹프로그래밍
- dp
- 라즈베리파이3
- 계획
- python 강의
- BOJ
- 철학
- 파이썬 강의
- mmcv
- it
- 라즈베리파이
- mmdetection
- python 강좌
- 강좌
- 파이썬
- 라즈베리파이 모니터
- 슬픔
- 파이썬 강좌
- 공부
- 백준
- 머신러닝
- 자작시
- Today
- Total
Stargazer
[Android] 액티비티 생명주기 (Activity LifeCycle) 본문
안드로이드의 액티비티는 생명주기라는 것을 가지고 있다.
생명주기(LifeCycle)이란?
액티비티가 시작하고 부터 끝날때까지의 루틴을 가리키는데, 액티비티의 상태 변화에 따른 콜백 메서드를 총칭한다.
쉽게 말하면 상태 변화를 알려주는 메서드다.
생명주기를 알아야 하는 이유:
액티비티 상태 변화에 따른 대응 및 문제 발생 예방을 해야하기 때문이다.
(ex. 사용자가 앱을 사용하는 도중에 전화가 걸려오거나 다른 앱으로 전환할 때 비정상 종료되는 문제)
생명주기
총 7가지의 콜백으로 구성되어 있다
onCreate(), onStart(), onResume(), onPause(), onStop(), onRestart(), onDestory()
각 구성을 하나씩 살펴보자
메소드 | 설명 | 다음 메소드 |
onCreate() | 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨. | onStart() |
onRestart() | 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출됨. | onStart() |
onStart() | 액티비티가 사용자에게 보여지기 바로 직전에 호출됨. | onResume() 또는 onStop() |
onResume() | 액티비티가 사용자와 상호작용하기 바로 전에 호출됨. | onPause() |
onPause() | 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드. | onResume() 또는 onStop() |
onStop() | 액티비티가 더이상 사용자에게 보여지지 않을 때 호출됨. 메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수도 있음. | onRestart() 또는 onDestroy() |
onDestroy() | 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨. | 없음 |
출처: https://kairo96.gitbooks.io/android/content/ch2.4.1.html
메서드 호출하기
그러면 직접 앱을 실행해보면서 언제 해당 메소드가 실행되는지 직접 호출해보며 살펴 보겠다.
우선 새로 프로젝트를 만들어서 Empty 액티비티를 생성하면, MainActivity.kt이라는 파일이 java/com.example."프로젝트 명" 내에 존재 하게 된다.
아래 코드는 해당 메소드들을 재정의한 후 실행시 메시지를 보여주는 코드이다.
package com.example.second_week
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.PersistableBundle
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Toast.makeText(this,"onCreate", Toast.LENGTH_SHORT).show()
}
override fun onStart() {
super.onStart()
Toast.makeText(this,"onStart", Toast.LENGTH_SHORT).show()
}
override fun onResume() {
super.onResume()
Toast.makeText(this,"onResume", Toast.LENGTH_SHORT).show()
}
override fun onPause() {
super.onPause()
Toast.makeText(this,"onPause", Toast.LENGTH_SHORT).show()
}
override fun onStop() {
super.onStop()
Toast.makeText(this,"onStop", Toast.LENGTH_SHORT).show()
}
override fun onRestart() {
super.onRestart()
Toast.makeText(this,"onRestart", Toast.LENGTH_SHORT).show()
}
}
그럼 앱을 종료해보자
액티비티 내 일반적인 호출 순서
액티비티 시작: onCreate() -> onStart() -> onResume()
액티비티 종료: onPause() -> onStop() -> onDestroy()
액티비티 재개: onPause() -> onStop() -> onRestart() -> onStart() -> onResume()
다이얼로그 실행 후 종료: onPause() -> onResume()
강제종료시 onCreate부터 호출
구체적인 활용 방안
onCreate: 액티비티 시작할때 가장 처음으로 시작하기 때문에, 액티비티 초기화 작업(화면 레이아웃 정의, 데이터 바인딩등 )이나 초기화면을 띄울때 사용
onStart: onCreate, onResume 사이이고, 화면이 노출되는 단계이므로 화면 진입할 때마다 처리 해야할 때 사용(광고배너 등)
onResume: 액티비티와 상호작용을 시작하는 단계이므로 상호작용에 필요한 기능을 불러올때 사용(임시저장 했던 입력폼 다시 불러오기 등)
onPause: 포커싱에서 벗어났을때 실행할 필요없는 기능들을 일시정지 할때(지도 뷰에서 현재 위치 gps 멈춤 등)
onStop: 액티비티가 더 이상 보이지 않고, Pause에 비해 무거운 작업을 해줄때 사용(데이터 저장 등)
onRestart: 기능을 다시 시작했을때, 상태에 변경이 생기게 하고 싶을때(광고 다시 불러오기, 데이터 불러오기등 )
onDestroy: 액티비티를 종료 할 때 호출 되므로, 마무리 작업을 할때 사용(로그아웃, 데이터 저장 등)
'프로그래밍 > Android' 카테고리의 다른 글
[Android] @SerializedName annotation (0) | 2021.08.06 |
---|---|
[Android] 뷰 바인딩 (View Binding) (0) | 2021.07.07 |
[Android] AndroidManifest 파일 역할과 기능 (0) | 2021.07.03 |
[Android] 안드로이드 레이아웃 정리 (0) | 2021.07.02 |
[Android] 안드로이드 스튜디오 팔레트 정리 (0) | 2021.07.01 |