화면에는 하나의 activity만 구성된다. 그 activity가 실행되고 다른 activity로 변경이 가능하다. activity가의 수명주기를 통해 어떤 방식으로 실행되고 종료되는지 알아야한다.
명시적 요철과 암시적 요청 기반으로 기능을 제공한다.
명시적 요청
: 카카오톡 앱에서 친구화면으로 활동 시작하도록 지시
암시적 요청
: 사용자에게 작업 실행할 때 어떤 앱 사용할지 묻는 메시지 표시하도록 앱 설정
<activity android:name=".StartActivity" android:icon="@drawable/app_icon">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
모든 activity가 생성될 때 가장 먼저 실행되는 것이다.
데이터 목록에 바인딩하고 activity를 ViewModel
과 연결한다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
✔️ savedInstanceState라는 변수에 이전 엑티비티의 상태를 저장해둔 Bundle객체를 저장하여 실행
activity가 사용자에게 표시되고 엑티비티를 준비하는 작업
매우 빠르게 진행되므로, 오래 머무르지 않는다.
이 callback이 끝나고, activitiy는 onResume()
을 호출한다.
activity가 실행하고 있는 상태이며, 사용자들과 상호작용 하는 상태이다.
다음 app이 실행될 때까지 이상태를 유지한다.
activity를 떠나면 가장 먼저 호출됨
activity가 일시중지 상태이고 잠시 후 다시 시작할 작업에 대해서 조정한다.
onPause()는 아주 잠깐 실행되므로 저장 작업 실행하기는 시간이 부족 (사용자 데이터 저장, 네트워크 호출, 데이터베이스 트랜잭션 실행 안됨)
activity가 사용자에게 표시 되지 않을 때 콜백 호출함
CPU를 많이 소모하는 종료작업 주로 실행함
활동이 소멸되기 전에 호출됨
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySignInBinding.inflate(layoutInflater)
setContentView(binding.root)
Log.d("onCreate","start")
}
override fun onStart() {
super.onStart()
Log.d("onStart","start")
}
override fun onResume() {
super.onResume()
Log.d("onResume","start")
}
override fun onPause() {
super.onPause()
Log.d("onPause","start")
}
override fun onDestroy() {
super.onDestroy()
Log.d("onDestroy","start")
}
앱을 실행하는 경우
다른 엑티비티로 이동한 경우
-> 회원가입 Activity로 이동
onPause -> onStop
onPause -> onStop -> onStart -> onResume회원가입 후 회원가입 완료 버튼 클릭하여 로그인창으로 이동
onStart -> onResume회원가입 activity에서 뒤로 가기 버튼 클릭해서 다시 로그인 activity로 이동하는 경우
로그인 엑티비티를 끄는 경우
onPause-> onStop -> onDestroy
엑티비티 중지 후 파괴
onCreate-> onStart -> onResume로그인 엑티비티 파괴된거 다시 실행시키기
onCreate()
부터 실행함로그인 엑티비티 잠시 중지시키고 다른 화면으로 이동한 경우
-> 가운데 버튼 눌러서 잠시 activity 중지
-> 위에 뒤로가기처럼 화면을 종료시킨 것은 아니기 때문에 onDestroy
를 실행시키지는 않는다.
onPause
-> 로그인 엑티비티가 포그라운드에 있지 않기 때문에 잠시 일시중지onStop
-> 앱이 사용자에게 보이지 않는 동안 필요하지 않은 리소스 중지시킴생명주기에 대해서 자세하게 다뤄야할 것 같아서 로그를 찍어 이해해보았다. 글로 읽는 것보다 확실히 이해가 잡힌듯 하다.