การจัดการสถานะ 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();
}

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

ผลลัพธ์

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

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

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