마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

앱 종료전에 코드 실행?

0 추천
앱을 렘에서 종료하기 직전에 파이어베이스에 데이터를 보내는 것이 가능한가요?
개미1 (1,260 포인트) 님이 2021년 11월 7일 질문

1개의 답변

0 추천

먼저 알아두셔할 것은 앱이 백그라운드로 가게 되면 시스템이 앱을 언제든지 죽일 수가 있습니다, 그렇기 때문에 액티비티의 onDestory는 100% 호출된다는 보장이 없습니다.

두가지 정도의 옵션이 생각나는데, 

첫번째는 액티비티의 onStop에서 필요한 데이터를 보내는 것입니다. (onStop은 무조건 호출되게 되므로). BaseActivity를 상속받거나 하면 될 것 같고,

다른 하나는 ProcessLifecycle을 이용하는 겁니다.
개발자문서: https://developer.android.com/reference/androidx/lifecycle/ProcessLifecycleOwner
블로그: https://proandroiddev.com/android-processlifecycleowner-by-example-2f965061b9da

사용법은, 먼저 build.gradle 에 dependency를 추가합니다.

    implementation "androidx.lifecycle:lifecycle-runtime:2.4.0"
    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
    annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.4.0"

Application. 클래스의 onCreate 에  아래와 같이 초기화를 해줍니다.

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
       
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new DefaultLifecycleObserver() {
            @Override
            public void onDestroy(@NonNull LifecycleOwner owner) {
                 //여기에서 필요한 처리.
            }
        });
    }
}

두번째 방법은 테스트를 해보지는 않아서 원하는 대로 잘 될지는 결과가 어떨지는 모르겠지만, 해볼만한 방법이라고 생각합니다. 아시겠지만, 이 방법을 사용하려면 MyApp을 AndrodiManifest.xml에 등록을 해주셔야 합니다.

spark (227,930 포인트) 님이 2021년 11월 7일 답변
...