ניהול מצבים של WebView

סמל של דירוג שלושה כוכבים

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()
}

Java

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

השלב הזה רלוונטי רק למערכת התצוגה, כי ב-Jetpack Compose אין צורך לבטל תוקף של רכיבים כדי לשנות את הגודל שלהם בצורה נכונה.Composable עם זאת, התכונה 'יצירת תוכן' יוצרת מחדש את WebView לעיתים קרובות אם לא מנהלים אותה בצורה נכונה. כדי לשמור ולשחזר את מצב WebView באפליקציות Compose, צריך להשתמש ב-wrapper של Accompanist WebView.

תוצאות

הרכיבים של האפליקציה WebView שומרים עכשיו את המצב ואת מיקום הגלילה שלהם אחרי כמה שינויים בהגדרות, החל משינוי גודל ועד שינוי כיוון, קיפול ופתיחה.

מקורות מידע נוספים

מידע נוסף על שינויים בהגדרות ועל ניהול שלהם זמין במאמר טיפול בשינויים בהגדרות.