차지

[Android Study Jam] Unit 5: Lifecycles and logging 본문

Android/Android

[Android Study Jam] Unit 5: Lifecycles and logging

Cha_Ji 2021. 4. 13. 05:29

이번 유닛에서는 라이프사이클과 로그에 대해서 학습합니다.

라이프사이클은 말그대로 생명 주기를 뜻합니다.

화면이 켜지면 create, 멈추면 pause, 꺼지면 destroy 등 각 상황에 대해서 다룹니다.

로그는 유저에게는 필요하지 않지만 개발자에게 필요한 기능입니다.

오류가 발생하는지 확인할 때 prinf로 일일히 찍을 수도 있지만,

로그를 사용해 실행 기록을 남길 수 있습니다.

여기서는 라이프사이클 과정에서 로그를 찍으며 실습합니다.

Acitivity Lifecycle

  • 생명 주기 메서드를 override하면서 그 안에 로그를 수집하는 코드를 추가합니다.
Log.i("MainActivity", "onCreate Called")

Android Studio 하단에 Logcat을 열어보면,

2021-01-29 11:44:32.942 3082-3082/com.example.android.dessertclicker I/MainActivity: onCreate Called

→ 로그가 수집되는 모습을 볼 수 있습니다.

다른 생명주기 메서드를 override 해봐도 위처럼 로그 수집으로 과정을 지켜볼 수 있습니다.

Timber

Timber는 logging library 중 하나입니다.

개발과정에선 로그를 남길 수 있고, 릴리즈 시점에서는 로그를 출력하기 싫을 때 사용합니다.

gradle에서 의존성을 추가해서 사용합니다.

Timber.plant(Timer.DebugTree()) //팀버 초기화 
Timber.i( "onCreate Called") 
Timber.d( "message")
  • 로그 찍어보기

 

Timber 라이브러리도 익혔으니, 각 생명주기 메서드에 로그를 찍어봅니다.

이와 같이 화면 위에 화면을 띄운다면 onPause()가 호출되고, 공유화면이 내려가면 onResume()이 호출되는 것을 볼 수 있습니다.

Fragment Lifecycle

override fun onAttach(context: Context) {
   super.onAttach(context)
   Log.i("TitleFragment", "onAttach called")
}
override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   Log.i("TitleFragment", "onCreate called")
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    Log.i("TitleFragment", "onViewCreated called")
}

override fun onStart() {
   super.onStart()
   Log.i("TitleFragment", "onStart called")
}
override fun onResume() {
   super.onResume()
   Log.i("TitleFragment", "onResume called")
}
override fun onPause() {
   super.onPause()
   Log.i("TitleFragment", "onPause called")
}
override fun onStop() {
   super.onStop()
   Log.i("TitleFragment", "onStop called")
}
override fun onDestroyView() {
   super.onDestroyView()
   Log.i("TitleFragment", "onDestroyView called")
}
override fun onDetach() {
   super.onDetach()
   Log.i("TitleFragment", "onDetach called")
}

Fragment 역시 Acitivity처럼 생명 주기를 갖고 있습니다.

하지만 메서드가 완전히 동일하진 않습니다.

같은 방법으로 로그를 찍어보면 라이프사이클에 대한 이해를 도울 수 있습니다.

화면이 회전할 때의 생명주기

가로세로 화면을 돌리면서 라이프사이클의 로그를 추적해보면

onSaveInstanceState()가 호출되어 데이터를 저장하고, onDestroy()로 앱이 지워집니다.

onCreate()로 새 액티비티가 그려지며 onStart() → onResume() 과 같은 순서로 진행됩니다.

특이하네요ㅎㅎ