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

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

WebView מצטיין בניהול המצב שלו. כדי ליהנות מהאיכות הזו, מומלץ לנהל כמה שיותר שינויים בהגדרות כדי לצמצם את מספר הפעמים שבהן נוצר מחדש WebView. האפליקציה צריכה לטפל בשינויים בהגדרות, כי יצירה מחדש של פעילות (הדרך של המערכת לטפל בשינויים בהגדרות) יוצרת מחדש את WebView, וכתוצאה מכך WebView מאבד את המצב.

תוצאות

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

ניהול מצב

מומלץ להימנע ככל האפשר מיצירה מחדש של פעילות במהלך שינויים בהגדרות, ולאפשר ל-WebView לבטל את התוקף כדי לשנות את הגודל תוך שמירה על המצב.

כדי לנהל את המצב של WebView:

  • הצהרה על שינויים בהגדרות שהאפליקציה מטפלת בהם
  • ביטול התוקף של מצב 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 בצורה נכונה, הוא נוצר מחדש לעיתים קרובות.

נקודות עיקריות

  • android:configChanges: מאפיין של רכיב <activity> במניפסט. רשימה של שינויי ההגדרות שהפעילות טיפלה בהם.
  • View#invalidate(): שיטה שגורמת לציור מחדש של תצוגה. הועבר בירושה אל WebView.

אוספים שכוללים את המדריך הזה

המדריך הזה הוא חלק מאוספים של מדריכים מהירים בנושאים שקשורים לפיתוח ל-Android:

כדאי להוסיף לאפליקציה תמיכה בחוויית משתמש אופטימלית בטאבלטים, במכשירים מתקפלים ובמכשירי ChromeOS.

יש לך שאלות או משוב?

אפשר לעבור לדף השאלות הנפוצות שלנו כדי לקרוא מדריכים מהירים, או לפנות אלינו ולספר לנו מה דעתך.