אופטימיזציה של היררכיות פריסה

רוצה לנסות את שיטת הכתיבה?
'Jetpack פיתוח נייטיב' היא ערכת הכלים המומלצת לממשק המשתמש ל-Android. הסבר איך עובדים עם פריסות ב'כתיבה'.

קיימת תפיסה מוטעית נפוצה, שלפיה שימוש במבני הפריסה הבסיסיים מוביל את הפריסות היעילות ביותר. עם זאת, כל ווידג'ט ופריסה שמוסיפים לאפליקציה דורש אתחול, פריסה ושרטוט. לדוגמה, שימוש בתצוגת עץ מופעים של LinearLayout עלולות להוביל להיררכיית צפיות עמוקה מדי. בנוסף, הצבה של כמה מופעים של LinearLayout שמשתמשים בפונקציה layout_weight יכול להיות יקר במיוחד, כי צריך למדוד כל ילד פעמיים. הדבר חשוב במיוחד כאשר הפריסה מנופחת שוב ושוב, כגון כשנעשה בו שימוש RecyclerView

במסמך הזה מוסבר איך משתמשים בודק הפריסה איתור שגיאות בקוד כדי לבדוק את הפריסה ולבצע אופטימיזציה שלה.

בדיקת הפריסה

כלי Android SDK כוללים את הכלי Layout Inspector, שמאפשר לנתח את הפריסה בזמן שהאפליקציה פועלת. השימוש בכלי הזה עוזר לך חוסר יעילות בביצועי הפריסה.

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

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

תמונה שבה מוצג פריט אחד ברשימה: תמונה אחת ושני טקסטים מיושרים אנכית
איור 1. פריסה רעיונית של פריט RecyclerView

בכלי לבדיקת הפריסה מוצגת רשימה של המכשירים הזמינים והפועלים שלהם רכיבים. בוחרים את הרכיב הרצוי בכרטיסייה Windows ולוחצים על בודק הפריסה כדי להציג את היררכיית הפריסה של הרכיב שנבחר. לדוגמה, איור 2 מציג את הפריסה של הפריט ברשימה לפי איור 1.

תמונה של 'בודק הפריסה' וההרכבה של פריסה לינארית
איור 2. היררכיית הפריסה של הפריסה ב: איור 1, באמצעות מופעים בתוך מופעים של LinearLayout.

שינוי הפריסה

מכיוון שביצועי הפריסה הקודמים מואטים בגלל בתצוגת עץ LinearLayout, אפשר לשפר את הביצועים על ידי כיווץ של הפריסה - כלומר, להפוך את הפריסה לרחבה ורחבה, צר ועמוק. א' ConstraintLayout כי צומת השורש מאפשר פריסות כאלה. כשממירים את העיצוב ל- ConstraintLayout, הפריסה הופכת להיררכיה דו-שלבית:

    <androidx.constraintlayout.widget.ConstraintLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/root"
      android:layout_width="match_parent"
      android:layout_height="52dp"
      android:background="#e4e6e4"
      android:padding="4dp">

      <ImageView
          android:id="@+id/image"
          android:layout_width="48dp"
          android:layout_height="48dp"
          android:background="#5c5c74"
          android:contentDescription="An example box"
          app:layout_constraintBottom_toBottomOf="parent"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintTop_toTopOf="parent" />

      <TextView
          android:id="@+id/title"
          android:layout_width="0dp"
          android:layout_height="0dp"
          android:layout_marginStart="4dp"
          android:background="#745c74"
          app:layout_constraintBottom_toTopOf="@+id/subtitle"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintStart_toEndOf="@id/image"
          app:layout_constraintTop_toTopOf="parent" />

      <TextView
          android:id="@+id/subtitle"
          android:layout_width="0dp"
          android:layout_height="0dp"
          android:background="#7e8d6e"
          app:layout_constraintBottom_toBottomOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintStart_toStartOf="@id/title"
          app:layout_constraintTop_toBottomOf="@+id/title" />
  </androidx.constraintlayout.widget.ConstraintLayout>
    

בדיקה של הפריסה החדשה נראית כך:

תמונה של הכלי לבדיקת פריסה בתלת-ממד
איור 3. מצב תלת-ממד של 'בודק הפריסה'.

היתרונות של אפשרות זו מוכפלים, שכן הפריסה הזו משמשת פריט ברשימה.

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

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

שימוש באיתור שגיאות

מומלץ להריץ את הכלי lint בקובצי הפריסה כדי לחפש אופטימיזציות אפשריות להיררכיית התצוגה. מוך מחליף את הכליDeployopt ויש לו פונקציונליות רבה יותר. אלו הם דוגמאות לאיתור שגיאות בקוד (lint) כללים:

  • משתמשים בפריטי גרפיקה מורכבים. אפשר לטפל ב-LinearLayout מכיל ImageView וגם TextView באופן יעיל יותר כפריט שניתן להזזה.
  • מיזוג המסגרת הבסיסית (root). אם השורש של פריסה הוא FrameLayout שלא מספק רקע או מרווח פנימי, אפשר להחליף אותו ב וגם תג מיזוג קצת יותר יעיל.
  • מסירים עלים לא מועילים. אפשר להסיר פריסה ללא ילדים או ללא רקע - מאחר שהוא בלתי נראה - ומחמיאה יותר היררכיית פריסה יעילה.
  • להסיר הורים לא מועילים. אפשר להסיר פריסה עם ילד או ילדה שלא הוספת אחים ואחיות, זה לא ScrollView או פריסת בסיס, ללא רקע. אפשר גם להעביר את כדי שהילדים יוכלו להסתכל ישירות אל ההורים, כדי לקבל תמונה חכמה יותר ויעילה יותר היררכיית הפריסה.
  • יש להימנע מפריסות עמוקות. פריסות עם יותר מדי קינון עלולות לפגוע או של ביצועים. מומלץ להשתמש בפריסות שטוחות יותר, כמו ConstraintLayout, כדי לשפר את הביצועים. ברירת המחדל של העומק המקסימלי לבדיקות לאיתור שגיאות היא 10.

יתרון נוסף של הכלי לאיתור שגיאות בקוד הוא השילוב שלו ב-Android Studio. מוך רצה באופן אוטומטי בכל פעם שאתה הידור את התוכנה. עם Android Studio, יכול גם להריץ בדיקות לאיתור שגיאות בקוד של גרסת build ספציפית או עבור כל גרסת ה-build וריאציות של אותו מודל.

אפשר גם לנהל פרופילי בדיקה ולהגדיר בדיקות בתוך Android Studio עם האפשרות File > הגדרות > Microsoft Project הגדרות. הדף 'הגדרת הבדיקה' מופיע עם של הבדיקות הנתמכות:

תמונה שמוצג בה תפריט הבדיקות של Android Studio
איור 4. דף ההגדרות האישיות של הבדיקה.

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

מידע נוסף זמין במאמר הבא: פריסות וגם פריסה מקור מידע.