예측 뒤로 동작을 지원하도록 앱 업데이트

그림 1: 휴대전화에 표시되는 예측 뒤로 동작의 디자인 샘플

Android 13에서는 휴대전화, 대형 화면, 폴더블과 같은 Android 기기의 예측 뒤로 동작을 도입합니다. 이 기능을 완전히 구현하면 사용자는 뒤로 동작을 완료하기 전에 뒤로 동작의 대상이나 다른 결과를 미리 볼 수 있습니다. 따라서 사용자는 계속할지 아니면 현재 뷰에 머무를지 결정할 수 있습니다.

예를 들어 뒤로 동작을 사용하면 그림 1의 샘플과 같이 앱 뒤에 홈 화면의 애니메이션 미리보기가 표시될 수 있습니다. Android 13 최종 출시부터는 개발자 옵션을 사용 설정하여 이 홈으로 돌아가기 애니메이션을 테스트할 수 있습니다(이 페이지에 설명됨).

예측 뒤로 동작을 지원하려면 OnBackPressedCallback AppCompat 1.6.0-alpha03(AndroidX) 이상 API 또는 새 OnBackInvokedCallback 플랫폼 API를 사용하여 앱을 업데이트해야 합니다.

이 업데이트에서는 KeyEvent.KEYCODE_BACKonBackPressed 메서드가 포함된 모든 클래스(예: Activity, Dialog)인 더 이상 지원되지 않는 뒤로 탐색 API의 이전 경로를 제공합니다.

Codelab

이 페이지에서 이 문서를 사용하는 것 외에도 AndroidX Activity APIs를 사용하여 예측 뒤로 동작을 처리하는 WebView의 일반적인 사용 사례 구현을 제공하는 Codelab을 사용해 보세요.

기본 뒤로 탐색을 사용하는 앱 업데이트

앱에서 맞춤 뒤로 동작을 구현하지 않으면(즉, 뒤로 처리 작업을 시스템에 맡김) 이 기능을 지원하도록 앱을 업데이트하는 작업은 간단합니다. 이 페이지에 설명된 대로 이 기능을 선택하기만 하면 됩니다.

맞춤 뒤로 탐색을 사용하는 앱 업데이트

앱에서 맞춤 뒤로 동작을 구현하는 경우 AndroidX를 사용하는지 여부와 뒤로 탐색을 처리하는 방식에 따라 이전 경로가 달라집니다.

앱에서 AndroidX 사용 앱에서 뒤로 탐색을 처리하는 방식 권장 이전 경로(이 페이지의 링크)
AndroidX API 기존 AndroidX 뒤로 구현 이전
지원되지 않는 플랫폼 API 지원되지 않는 뒤로 탐색 API가 포함된 AndroidX 앱을 AndroidX API로 이전
아니요 지원되지 않는 플랫폼 API, 이전 가능 지원되지 않는 뒤로 탐색 API를 사용하는 앱을 플랫폼 API로 이전
지원되지 않는 플랫폼 API, 이전 불가능 필수 기능이 될 때까지 선택 연기

AndroidX 뒤로 탐색 구현 이전

이 사용 사례가 가장 일반적입니다(가장 권장됨). 이는 맞춤 뒤로 탐색 제공에 설명된 대로 OnBackPressedDispatcher를 사용하여 맞춤 동작 탐색 처리를 구현하는 신규 또는 기존 앱에 적용됩니다.

앱이 이 카테고리에 속하는 경우 이 페이지에 설명된 예측 뒤로 동작을 선택하여 예측 뒤로 지원을 추가할 수 있습니다.

지원되지 않는 뒤로 탐색 API가 포함된 AndroidX 앱을 AndroidX API로 이전

앱에서 AndroidX 라이브러리를 사용하지만 지원되지 않는 뒤로 탐색 API를 구현하거나 참조하는 경우 새 동작을 지원하기 위해 AndroidX API를 사용하도록 이전해야 합니다.

지원되지 않는 API를 AndroidX API로 이전하려면 다음 단계를 따르세요.

  1. OnBackPressedCallback 구현을 사용하여 시스템 뒤로 처리 로직을 AndroidX의 OnBackPressedDispatcher로 이전합니다. 자세한 내용은 맞춤 뒤로 탐색 제공을 참고하세요.

  2. 시스템 뒤로 탐색 가로채기를 중지하려면 이전에 사용 설정한 OnBackPressedCallback의 인스턴스를 사용 중지하거나 항상 콜백을 사용 설정하지 않아야 합니다.

  3. 앱 이전이 정상적으로 완료되면 이 페이지에 설명된 대로 예측 뒤로 동작을 선택합니다.

지원되지 않는 뒤로 탐색 API를 사용하는 앱을 플랫폼 API로 이전

앱에서 AndroidX 라이브러리를 사용할 수 없고 대신 지원되지 않는 API를 사용하여 맞춤 뒤로 탐색을 구현하거나 참조하는 경우 OnBackInvokedCallback 플랫폼 API로 이전해야 합니다.

지원되지 않는 API를 플랫폼 API로 이전하려면 다음 단계를 따르세요.

  1. Android 13 이상을 실행하는 기기에서는 새 OnBackInvokedCallback API를 사용하고 Android 12 이하를 실행하는 기기에서는 지원되지 않는 API를 사용합니다.

  2. onBackInvoked 메서드의 로직에 OnBackInvokedCallback의 맞춤 뒤로 로직을 등록합니다. 이렇게 하면 현재 활동이 완료되는 것을 방지하고 콜백은 사용자가 시스템 뒤로 탐색을 완료하면 뒤로 작업에 응답할 수 있습니다.

  3. 향후 시스템 뒤로 탐색 개선사항이 제대로 지원되도록 하려면 앱에서 OnBackInvokedCallback을 등록 취소해야 합니다. 그러지 않으면 시스템 뒤로 탐색을 사용할 때 사용자에게 원치 않는 동작이 표시될 수 있습니다. 예를 들어 뷰 사이에 '멈춰서' 앱을 강제 종료해야 할 수 있습니다.

    다음은 onBackPressed에서 로직을 이전하는 방법을 보여주는 예입니다.

    Kotlin

    @Override
    fun onCreate() {
        if (BuildCompat.isAtLeastT()) {
            onBackInvokedDispatcher.registerOnBackInvokedCallback(
                OnBackInvokedDispatcher.PRIORITY_DEFAULT
            ) {
                /**
                 * onBackPressed logic goes here. For instance:
                 * Prevents closing the app to go home screen when in the
                 * middle of entering data to a form
                 * or from accidentally leaving a fragment with a WebView in it
                 *
                 * Unregistering the callback to stop intercepting the back gesture:
                 * When the user transitions to the topmost screen (activity, fragment)
                 * in the BackStack, unregister the callback by using
                 * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback
                 * (https://developer.android.com/reference/kotlin/android/view/OnBackInvokedDispatcher#unregisteronbackinvokedcallback)
                 */
            }
        }
    }
    

    자바

    @Override
    void onCreate() {
      if (BuildCompat.isAtLeastT()) {
        getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
            OnBackInvokedDispatcher.PRIORITY_DEFAULT,
            () -> {
              /**
               * onBackPressed logic goes here - For instance:
               * Prevents closing the app to go home screen when in the
               * middle of entering data to a form
               * or from accidentally leaving a fragment with a WebView in it
               *
               * Unregistering the callback to stop intercepting the back gesture:
               * When the user transitions to the topmost screen (activity, fragment)
               * in the BackStack, unregister the callback by using
               * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback
               * (https://developer.android.com/reference/kotlin/android/view/OnBackInvokedDispatcher#unregisteronbackinvokedcallback)
               */
            }
        );
      }
    }
    
  4. 앱 이전이 완료되면 다음 섹션에 설명된 대로 예측 뒤로 동작을 선택합니다.

예측 뒤로 동작 선택

사례를 기반으로 앱을 업데이트하는 방법을 결정했다면 예측 뒤로 동작을 지원하도록 쉽게 선택할 수 있습니다.

선택하려면 AndroidManifest.xml<application> 태그에서 android:enableOnBackInvokedCallback 플래그를 true로 설정합니다.

<application
    ...
    android:enableOnBackInvokedCallback="true"
    ... >
...
</application>

값을 제공하지 않으면 기본값은 false이며 예측 뒤로 동작이 사용 중지됩니다.

예측 뒤로 동작 애니메이션 테스트

Android 13 최종 출시부터 개발자 옵션을 사용 설정하여 그림 1에 표시된 홈으로 돌아가기 애니메이션을 테스트할 수 있습니다.

이 애니메이션을 테스트하려면 다음 단계를 완료하세요.

  1. 기기에서 설정 > 시스템 > 개발자 옵션으로 이동합니다.

  2. 예측 뒤로 애니메이션을 선택합니다.

  3. 업데이트된 앱을 실행하고, 뒤로 동작을 사용하여 실제 작동하는 모습을 확인합니다.