투케이2K

217. (TWOK/WORK) [개선 요청] 안드로이드 장기간 백그라운드 상태 인 앱을 포그라운드 전환 시 앱 재실행 요청 개발 - ActivityLifecycleCallbacks 본문

투케이2K 업무정리

217. (TWOK/WORK) [개선 요청] 안드로이드 장기간 백그라운드 상태 인 앱을 포그라운드 전환 시 앱 재실행 요청 개발 - ActivityLifecycleCallbacks

투케이2K 2026. 5. 27. 20:20
728x90
반응형

[제 목]

주제 : 투케이2K 업무 정리

타이틀 : 투케이 / 2k / 업무 정리

제목 : [개선 요청] 안드로이드 장기간 백그라운드 상태 인 앱을 포그라운드 전환 시 앱 재실행 요청 개발 - ActivityLifecycleCallbacks

 

[내 용]

------------------------------------------------------------------------------
[개발 및 테스트 환경]
------------------------------------------------------------------------------

- 제 목 : [개선 요청] 안드로이드 장기간 백그라운드 상태 인 앱을 포그라운드 전환 시 앱 재실행 요청 개발 - ActivityLifecycleCallbacks


- 테스트 환경 : Android / ActivityLifecycleCallbacks / LAUNCHER


- 사전) 👉 ActivityLifecycleCallbacks 간략 설명

  >> Application.ActivityLifecycleCallbacks 는 앱 전체에서 모든 Activity의 생명주기 변화를 한 곳에서 감시/처리할 수 있게 해주는 인터페이스입니다.

  >> Application.ActivityLifecycleCallbacks 사용 시 각 Activity마다 onCreate, onStart 등을 일일이 구현하지 않고도 공통 로직을 중앙에서 관리할 수 있습니다.

  >> Application.ActivityLifecycleCallbacks 활용 예시 : 

    - 화면 전환 로그 수집 (Analytics)
    - 앱Foreground / Background 판단
    - 공통 UI 처리 (예: 다이얼로그, 테마 적용)
    - Activity 스택 관리
    - 광고 삽입 타이밍 제어
    - 디버깅 및 추적

  >> Application.ActivityLifecycleCallbacks 사용을 위한 AndroidManifest.xml 등록 방법 :
  
    <application
        android:name=".MyApplication"
        ... >
    </application>

  >> 안드로이드 Activity 라이프사이클 예시 : 

    - onCreate → onStart → onResume → (Running) 
    - onPause → onStop → onDestroy

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[이슈 사항]
------------------------------------------------------------------------------

1. 🟥 장기간 앱 사용 방지 및 주기적 앱 재실행 , 앱 버전 체크를 위해 일정 시간 앱을 재실행 하지 않은 경우 앱을 재실행할 수 있도록 기능 구현 요청


2. 🟥 기능 구현 요청 내용 정리 : 

  >> 특정 앱 실행 후 일정 시간 동안 (ex : 3 시간) 앱을 재실행 하지 않은 경우 경고 알림 팝업창 표시 요청

  >> 특정 앱 실행 시 마다 앱 버전 체크를 수행하며, 앱이 업데이트가 필요한 경우 앱을 업데이트 한 이후에 앱을 사용할 수 있도록 구현 요청

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[원인 파악 및 증상 재현]
------------------------------------------------------------------------------

1. ✔️ 특정 앱 실행 후 일정 시간 동안 (ex : 3 시간) 앱을 재실행하지 않고 백그라운드 상태로 전환 수행


2. 🟥 현재 상황 - 일정 시간이 지난 후 휴대폰 작업 목록에 있는 앱을 다시 포그라운드 전환 시 경고 팝업창 없이 앱 사용 가능한 상태 확인

  >> 안드로이드 프로젝트에 애플리케이션 ActivityLifecycleCallbacks 를 사용해 각 액티비티 동작 상태는 확인 가능한 상태

------------------------------------------------------------------------------






------------------------------------------------------------------------------
[조치 내용]
------------------------------------------------------------------------------

1. 🟦 앱 실행 시 <intent-filter> 로 등록 된 런처 액티비티와 ActivityLifecycleCallbacks 을 통해 감지 되는 액티비티 라이프 사이클 onResume 상태에서

   시간 비교 수행 및 일정 시간 (ex : 3 시간) 앱을 지속 사용 중인 경우 다시 앱을 실행 하도록 Alert 알림 팝업창 표시 수행


2. 🟦 변경 된 로직 간략 설명 : 

  >> 앱 실행 시 <intent-filter> 로 등록 된 런처 액티비티 (ex : 로딩 화면) 에서 onCreate 이벤트 감지 시 현재 날짜 및 시간 상태 저장 (yyyyMMddHHmmss)

  >> 애플리케이션 ActivityLifecycleCallbacks 이벤트 감지 콜백에서 onResume 이벤트가 감지 된 경우 현재 날짜 및 시간 상태 확인 수행 (yyyyMMddHHmmss)

    - 👉 ActivityLifecycleCallbacks 를 통해 감지할 수 있는 라이프 사이클 이벤트 콜백 종류 : 

      $ onActivityCreated : Activity 생성됨 (onCreate 이후)
      $ onActivityStarted : 화면에 보이기 시작
      $ onActivityResumed : 사용자와 상호작용 가능
      $ onActivityPaused : 다른 화면으로 가기 직전
      $ onActivityStopped : 화면에서 완전히 사라짐
      $ onActivitySaveInstanceState : 상태 저장
      $ onActivityDestroyedActivity : 종료

  >> 런처 액티비티 실행 시 저장한 시간과 onResume 액티비티에서 감지 된 시간 각 시간 차이 확인 수행

  >> 일정 시간 (ex : 3 시간) 이 지난 경우 Alert 경고 팝업창 표시 수행


3. 🟦 애플리케이션 ActivityLifecycleCallbacks 이벤트 감지 예시 코드 첨부 : 

public class A_Application extends Application implements Application.ActivityLifecycleCallbacks {

  public static final String ACTIVITY_NAME = "A_Application";

  @Override
  protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
  }

  @Override
  public void onCreate() {
    super.onCreate();
  }

  @Override
  public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) { }

  @Override
  public void onActivityStarted(@NonNull Activity activity) { }

  @Override
  public void onActivityResumed(@NonNull Activity activity) { }

  @Override
  public void onActivityPaused(@NonNull Activity activity) { }

  @Override
  public void onActivityStopped(@NonNull Activity activity) { }

  @Override
  public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) { }

  @Override
  public void onActivityDestroyed(@NonNull Activity activity) { }

}

------------------------------------------------------------------------------





------------------------------------------------------------------------------
[참고 사이트]
------------------------------------------------------------------------------

▶️ [Application 애플리케이션 클래스 ActivityLifecycleCallbacks 상속 후 Activity 액티비티 라이프 사이클 감지]

https://kkh0977.tistory.com/4875

https://blog.naver.com/kkh0977/223264773475?trackingCode=blog_bloghome_searchlist


▶️ [Android] 푸시 (push) 알림 포그라운드 , 백그라운드 , 앱 kill 상태 클릭 이벤트 로직

https://kkh0977.tistory.com/2436

https://blog.naver.com/kkh0977/222861938632?trackingCode=blog_bloghome_searchlist


▶️ [간단 소스] 안드로이드 UsageStatsManager UsageEvents 특정 시간 동안 앱 포그라운드 , 백그라운드 전환 시간 확인

https://kkh0977.tistory.com/8856

https://blog.naver.com/kkh0977/224297112575?trackingCode=blog_bloghome_searchlist


▶️ [LifecycleObserver 라이브러리 사용해서 액티비티 포그라운드 및 백그라운드 상태 확인]

https://kkh0977.tistory.com/447

https://blog.naver.com/kkh0977/222260425851?trackingCode=blog_bloghome_searchlist


▶️ [Android] 라이프사이클 onCreate 재호출 이슈 (reCall)

https://kkh0977.tistory.com/3323

https://blog.naver.com/kkh0977/222938687189?trackingCode=blog_bloghome_searchlist


▶️ [업무 이슈] 안드로이드 static 변수 선언 한 휘발성 데이터 유실로 데이터 null 전송 이슈

https://kkh0977.tistory.com/8706

https://blog.naver.com/kkh0977/224222577173?trackingCode=blog_bloghome_searchlist

------------------------------------------------------------------------------
 
728x90
반응형
Comments