WebView 상태 관리

별 3개 평점 아이콘

WebView 는 일반적으로 사용되는 구성요소로, 상태 관리를 위한 고급 시스템을 제공합니다. WebView는 구성 변경 시 상태와 스크롤 위치를 유지해야 합니다. WebView는 사용자가 기기를 회전하거나 폴더블 휴대전화를 펼칠 때 스크롤하던 위치를 잃을 수 있습니다. 이런 경우 사용자가 WebView의 상단에서 이전 스크롤 위치로 다시 스크롤해야 합니다.

권장사항

WebView가 다시 생성되는 횟수를 최소화합니다. WebView 는 상태를 관리하는 데 능숙하며 가능한 한 많은 구성 변경을 관리하여야 이 기능의 장점을 활용할 수 있습니다. 재생성 (Activity 시스템에서 구성 변경을 처리하는 방식) 시 WebView도 다시 생성하므로 WebView에서 상태가 손실될 수 있기 때문에 앱이 구성 변경을 처리해야 합니다.

재료

  • android:configChanges: 매니페스트 <activity> 요소의 속성입니다. 활동이 처리하는 구성 변경을 나열합니다.
  • View#invalidate(): 뷰를 다시 그리는 메서드입니다. WebView에서 상속됩니다.

단계

WebView 상태를 저장하려면 Activity 재생성을 최대한 방지하고 그런 다음 상태를 유지하면서 크기를 조절할 수 있도록 WebView를 무효화합니다.

1. AndroidManifest.xml에 구성 변경 추가

시스템이 아닌 앱에서 처리하는 구성 변경을 지정하여 활동 재생성을 방지합니다.

<activity
  android:name=".MyActivity"
  android:configChanges="screenLayout|orientation|screenSize
      |keyboard|keyboardHidden|smallestScreenSize" />

2. 구성 변경 시 WebView 무효화

Kotlin

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    webView.invalidate()
}

자바

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    webview.invalidate();
}

이 단계는 Jetpack Compose가 어떤 것을 무효화할 필요가 없으므로 뷰 시스템에만 적용됩니다.Composable 그러나 Compose는 올바르게 관리되지 않으면 WebView를 자주 다시 만듭니다. Accompanist WebView 래퍼를 사용하여 Compose 앱에 WebView 상태를 저장하고 복원합니다.

결과

이제 앱의 WebView 구성요소가 크기 조절, 방향 변경, 접기 및 펼치기 등 여러 구성 변경사항에 대해 상태 및 스크롤 위치를 유지합니다.

추가 리소스

구성 변경사항 및 관리 방법에 대한 자세한 내용은 구성 변경 처리 를 참고하세요.