Activity Life Cycle(액티비티 수명 주기)
- 라이프 사이클 단계 간에 전환하기 위해 액티비티 클래스는 6가지 콜백으로 구성된 핵심 집합을 제공한다.
- 액티비티가 새로운 상태에 들어가면 시스템은 각 콜백을 호출한다.
- 종류 : onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy()
1. onCreate()
- 이 콜백은 시스템이 액티비티를 생성할 때 실행되는 것으로 필수적으로 구현
- 액티비티가 생성되면 생성됨 상태가 됨
- 액티비티의 전체 수명 주기 동안 한번만 발생해야하는 기본 어플리케이션 시작 로직을 실행
- 이 메서드는 이전 액티비티의 저장 상태가 포함된 Bundle 객체인 savedInstanceState 매개변수를 수신
- 처음 생성된 액티비티의 경우 Bundle 객체의 값은 null
2. onStart()
- 액티비티가 시작됨 상태에 들어가면 시스템이 이 콜백을 호출
- onStart()가 호출되면 액티비티가 사용자에게 표시되고 앱은 액티비티를 포그라운드에 보내 상호작용 할 수 있도록 준비
- 이 메서드는 매우 빠르게 완료되고, 이 콜백이 완료되면 액티비티는 재개됨 상태에 들어가고, 시스템이 onResume() 메서드를 호출
3. onResume()
- 액티비티가 재개됨 상태에 들어가면 포그라운드에 표시되고 시스템이 이 콜백을 호출
- 앱이 사용자와 상호작용. 어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 앱이 이 상태에 머무름
- 예를 들어 전화가 오거나, 사용자가 다른 활동으로 이동하거나, 기기 화면이 꺼지는 이벤트가 이에 해당
- 방해되는 이벤트가 발생하면 액티비티는 일시중지됨 상태에 들어가고 시스템이 onPause() 콜백을 호출
- 액티비티가 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 이 메서드를 다시 한번 호출
4. onPause()
- 사용자가 액티비티를 떠나는 것을 나타내는 첫 번째 신호로 이 메서드를 호출, 활동이 소멸되지 않음
- 액티비티가 포그라운드가 아닌 백그라운드에 있게 됨, 멀티 윈도우의 경우에는 여전히 표시 될 수 있음
5. onStop()
- 액티비티가 사용자에게 더 이상 표시되지 않으면 중단됨 상태에 들어가고 시스템이 onStop() 콜백을 호출
- 예를 들어 새로 시작된 액티비티가 화면 전체를 차지 할 경우에 적용
- 시스템은 액티비티의 실행이 완료되어 종료될 시점에 이 메서드를 호출 할 수도 있음
- 이 메서드에서는 앱이 사용자에게 보이지 않는 동안 필요하지 않은 리소스를 해제하거나 조정해야 함
6. onDestroy()
- 액티비티가 소멸되기 전에 호출
- 사용자가 액티비티를 완전히 종료하는 경우
- 구성 변경으로 인해 시스템이 일시적으로 액티비티를 소멸 시키는 경우
- 액티비티가 소멸됨 상태로 전환하면 활동이 수신하는 마지막 콜백인 onDestroy() 콜백을 호출
- 이전의 콜백에서 아직 해제되지 않은 모든 리소스를 해제해야 함(예: onStop() )
아래 샘플코드를 실행해 로그를 통해 라이프사이클의 동작을 파악해보자.
메인액티비티 class
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("LifeCycleApp", "onCreate 함수 실행");
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 두번째 액티비티를 실행시키는 코드 작성
// 인텐트를 만든다!
// 인텐트란, 어떤 액티비티가 어떤 액티비티를 띄우겠다 라는 것
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//액티비티간의 이동
startActivity(intent);
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.i("LifeCycleApp", "onStart 함수 실행");
}
@Override
protected void onResume() {
super.onResume();
Log.i("LifeCycleApp", "onResume 함수 실행");
}
@Override
protected void onPause() {
super.onPause();
Log.i("LifeCycleApp", "onPause 함수 실행");
}
@Override
protected void onStop() {
super.onStop();
Log.i("LifeCycleApp", "onStop 함수 실행");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("LifeCycleApp", "onDestroy 함수 실행");
}
}
세컨액티비티 class
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Log.i("LifeCycleApp", "두번째 액티비티의 onCreate 함수 실행");
}
@Override
protected void onStart() {
super.onStart();
Log.i("LifeCycleApp", "두번째 액티비티의 onStart 함수 실행");
}
@Override
protected void onResume() {
super.onResume();
Log.i("LifeCycleApp", "두번째 액티비티의 onResume 함수 실행");
}
@Override
protected void onPause() {
super.onPause();
Log.i("LifeCycleApp", "두번째 액티비티의 onPause 함수 실행");
}
@Override
protected void onStop() {
super.onStop();
Log.i("LifeCycleApp", "두번째 액티비티의 onStop 함수 실행");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("LifeCycleApp", "두번째 액티비티의 onDestroy 함수 실행");
}
}
'Android' 카테고리의 다른 글
Android Studio - SharedPreferences 를 이용해 앱 내에 데이터 저장, 불러오기 (0) | 2023.01.31 |
---|---|
Android Studio - 액티비티 간의 화면 전환, 데이터 전달(단방향/양방향) (0) | 2023.01.30 |
Android Studio - AlertDialog 사용법 (0) | 2023.01.27 |
Android Studio - ProgressBar 사용법 (0) | 2023.01.27 |
Android Studio - Toast, SnackBar 메시지 처리 방법 (0) | 2023.01.26 |