안드로이드 액티비티 생명주기

이번에 Django rest api 서버 포지션으로 안드로이드와 협업하는 경험이 있었다.

안드로이드 어플을 개발함에 있어서 안드로이드 컴포넌트 중 하나인 액티비티 생명주기에 대해 깊은 이해가 필요한 것을 보고 정리하게 되었다.

액티비티 생명주기

수명주기 콜백 메서드

onCreate()

  • 액티비티가 생성될 때 호출되면 사용자 인터페이스 초기화에 사용됨.
  • 필수적으로 구현해야 함.
  • 데이터를 목록에 바인딩하고, 액티비티를 ViewModel과 연결하고, 일부 클래스 범위 변수를 인스턴스화할 수 있음.
  • 이후 시스템이 연달아 onStart()와 onResume() 메서드를 호출

onStart()

  • 액티비티가 사용자에게 보여지기 바로 직전에 호출됨.
  • 앱은 액티비티를 포그라운드에 보내 상호작용할 수 있도록 준비
  • 앱이 UI를 관리하는 코드를 초기화
  • onStart() 메서드는 매우 빠르게 완료되고, 이후 onResume() 메서드를 호출함

onResume()

  • 액티비티가 사용자와 상호작용하기 바로 전에 호출됨.
  • 전화, 다른 액티비티으로 이동, 기기 화면이 꺼지는 등의 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 onResume() 상태에 머무름.
  • 방해되는 이벤트 발생시 시스템이 onPause() 콜백을 호출
  • 액티비티가 일시중지됨 상태에서 재개됨 상태로 돌아오면 시스템이 onResume() 메서드를 다시 한번 호출함. 따라서 onResume()을 구현하여 onPause() 중에 해제하는 구성요소를 초기화하고, 액티비티가 재개될 때마다 필요한 다른 초기화 작업도 수행해야 함.

onPause()

  • 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등 처리할 때 쓰이는 메소드
  • 사용자가 액티비티에서 떠나는 첫 신호로 시스템은 onPause() 메서드를 호출. 액티비티가 포그라운드에 있지 않다는 것을 나타냄.
  • 구성요소가 포그라운드에 있지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있음.
  • opPause()는 아주 잠깐 실행되므로 저장 작업을 실행하기에는 시간이 부족할 수 있음. 따라서 onPause()를 사용하여 애플리케이션 또는 사용자 데이터를 저장하거나, 네트워크 호출을 하거나, 데이터베이스 트랜잭션을 실행하면 안 됨. 부하가 큰 종료 작업은 onStop() 상태일 때 실행해야 함.

onStop()

  • 액티비티가 더 이상 사용자에게 보여지지 않을 때 호출됨.
  • 새로 시작된 액티비티가 화면 전체를 차지할 경우에 적용.
  • 구성요소가 화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있음.
  • 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야 함.
  • 멀티 윈도우 모드를 더욱 잘 지원하기 위해 UI 관련 리소스와 작업을 완전히 해제하거나 조정할 때 onPause() 대신 onStop()을 사용하는 것이 좋음.
  • onStop()을 사용하여 CPU를 비교적 많이 사용하는 종료 작업을 실행해야 함. 예를 들어 정보를 데이터베이스에 저장할 적절한 시기를 찾지 못했다면 onStop() 상태일 때 저장할 수 있음.
  • 액티비티가 중단됨 상태에 들어가면 액티비티 객체는 메모리 안에 머무르게 된다.
  • 액티비티가 다시 시작되면 시스템은 onRestart()를 호출. 액티비티가 실행을 종료하면 시스템은 onDestroy()를 호출.

onRestart()

  • 액티비티가 멈추었다가 다시 시작되기 바로 전에 호출됨.

onDestroy()

  • 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨.
  • 구성 변경으로 인해 onDestory()가 호출되는 경우 시스템이 즉시 새 활동 인스턴스를 생성한 다음, 새로운 구성에서 그 새로운 이스턴스에 관해 onCreate()를 호출

Reference

파이어베이스 사용자분석(firebase analytics)

  • 앱의 사용량과 행동 데이터 수집

  • 이벤트 (사용자가 광고를 클릭할 때 등), 사용자 속성(연령, 성별, 휴대기기 등)에 대한 로깅을 SDK 설정을 통해 별도 코드 없이 이용 가능

    사용자 속성

    이벤트

안드로이드

Google 애널리틱스 시작하기(안드로이드)

  1. Firebase 홈페이지에서 새로운 Firebase 프로젝트를 시작하고, Google 애널리틱스를 사용함으로 설정한다.

  2. 앱에 애널리틱스 SDK 추가

    1. App/build.gradle 에 Google 애널리틱스의 dependency 추가

      implementation 'com.google.firebase:firebase-analytics:17.4.1'
    2. com.google.firebase.analytics.FirebaseAnalytics 객체를 선언

      private FirebaseAnalytics mFirebaseAnalytics;
    3. onCreate() 메소드에서 초기화

      mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
  3. 이벤트 로깅 시작

    • FirebaseAnalytics 인스턴스를 만든 후 logEvent() 메서드로 이벤트에 대한 로깅을 할 수 있다.

      Bundle bundle = new Bundle();
      bundle.putString(FirebaseAnalytics.Param.ITEM_ID, id);
      bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, name);
      bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "image");
      mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);

iOS

Google 애널리틱스 시작하기(iOS)

  1. Firebase 홈페이지에서 새로운 Firebase 프로젝트를 시작하고, Google 애널리틱스를 사용함으로 설정한다. (안드로이드와 같은 프로젝트 사용)

  2. 앱에 애널리틱스 SDK 추가

    1. Firebase에 대한 dependency을 Podfile에 추가

      pod 'Firebase/Analytics'
    2. pod install 이후, .xcworkspace 파일을 연다

    3. UIApplicationDelegate에서 파이어베이스 모듈을 import

      import Firebase
    4. FirebaseApp 인스턴스 구성

      FirebaseApp.configure()
  3. 이벤트 로깅 시작

    • FirebaseeApp 인스턴스를 만든 후, logEvnet() 메소드를 이용해 이벤트에 대해 로깅을 사용할 수 있음

      Analytics.logEvent(AnalyticsEventSelectContent, parameters: [
        AnalyticsParameterItemID: "id-\(title!)",
        AnalyticsParameterItemName: title!,
        AnalyticsParameterContentType: "cont"
        ])

'Android' 카테고리의 다른 글

안드로이드 액티비티 생명주기  (0) 2020.07.22

+ Recent posts