การจัดการสถานะ WebView

ไอคอนให้คะแนน 3 ดาว

WebView เป็นคอมโพเนนต์ที่ใช้กันโดยทั่วไปซึ่งมีระบบขั้นสูงสำหรับการจัดการสถานะ WebView ต้องรักษาสถานะและตำแหน่งการเลื่อนไว้เมื่อมีการเปลี่ยนแปลงการกำหนดค่า WebView อาจสูญเสียตำแหน่งการเลื่อนเมื่อผู้ใช้หมุนอุปกรณ์หรือกางโทรศัพท์แบบพับได้ ซึ่งบังคับให้ผู้ใช้ต้องเลื่อนอีกครั้งจากด้านบนของ WebView ไปยังตำแหน่งการเลื่อนก่อนหน้า

แนวทางปฏิบัติแนะนำ

ลดจำนวนครั้งที่สร้าง WebView ใหม่ WebView มีความสามารถในการจัดการสถานะได้ดี และคุณสามารถใช้ประโยชน์จากความสามารถนี้ได้โดยการจัดการการเปลี่ยนแปลงการกำหนดค่าให้ได้มากที่สุด แอปของคุณต้องจัดการการเปลี่ยนแปลงการกำหนดค่าเนื่องจากการสร้าง Activity ใหม่ (วิธีจัดการการเปลี่ยนแปลงการกำหนดค่าของระบบ) จะสร้าง WebView ใหม่ด้วย ซึ่งทำให้ WebView สูญเสียสถานะ

ส่วนผสม

  • android:configChanges: แอตทริบิวต์ขององค์ประกอบ <activity> ในไฟล์ Manifest แสดงรายการการเปลี่ยนแปลงการกำหนดค่าที่กิจกรรมจัดการ
  • 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()
}

Java

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

ขั้นตอนนี้ใช้ได้กับระบบมุมมองเท่านั้น เนื่องจาก Jetpack Compose ไม่จำเป็นต้อง ยกเลิกการใช้งานใดๆ เพื่อปรับขนาด Composable อย่างถูกต้อง อย่างไรก็ตาม Compose จะสร้าง WebView ใหม่บ่อยครั้งหากไม่ได้จัดการอย่างถูกต้อง ใช้ Accompanist WebView Wrapper เพื่อบันทึกและกู้คืนสถานะ WebView ในแอป Compose

ผลลัพธ์

ตอนนี้คอมโพเนนต์ WebView ของแอปจะยังคงสถานะและตำแหน่งการเลื่อนไว้เมื่อมีการเปลี่ยนแปลงการกำหนดค่าหลายรายการ ตั้งแต่การปรับขนาดไปจนถึงการเปลี่ยนการวางแนว ไปจนถึงการพับและกางออก

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงการกำหนดค่าและวิธีจัดการการเปลี่ยนแปลงดังกล่าวได้ที่จัดการ การเปลี่ยนแปลงการกำหนดค่า