קיימת תפיסה מוטעית נפוצה, שלפיה שימוש במבני הפריסה הבסיסיים מוביל
את הפריסות היעילות ביותר. עם זאת, כל ווידג'ט ופריסה שמוסיפים לאפליקציה
דורש אתחול, פריסה ושרטוט. לדוגמה, שימוש בתצוגת עץ
מופעים של
LinearLayout
עלולות להוביל להיררכיית צפיות עמוקה מדי. בנוסף, הצבה של כמה
מופעים של LinearLayout
שמשתמשים בפונקציה layout_weight
יכול להיות יקר במיוחד, כי צריך למדוד כל ילד פעמיים.
הדבר חשוב במיוחד כאשר הפריסה מנופחת שוב ושוב, כגון
כשנעשה בו שימוש
RecyclerView
במסמך הזה מוסבר איך משתמשים בודק הפריסה איתור שגיאות בקוד כדי לבדוק את הפריסה ולבצע אופטימיזציה שלה.
בדיקת הפריסה
כלי Android SDK כוללים את הכלי Layout Inspector, שמאפשר לנתח את הפריסה בזמן שהאפליקציה פועלת. השימוש בכלי הזה עוזר לך חוסר יעילות בביצועי הפריסה.
כלי לבדיקת הפריסה מאפשר לבחור תהליכים מריצים במכשיר מחובר או אמולטור, ואז להציג את עץ הפריסה. הרמזורים בכל בלוק שמייצג את ביצועי המדידה, הפריסה ו'שרטוט', ועוזרות לכם של בעיות פוטנציאליות.
לדוגמה, איור 1 מציג פריסה שמשמשת כפריט
RecyclerView
בפריסה הזו מוצגת תמונה קטנה של מפת סיביות (bitmap) מימין
ושני פריטי טקסט מוערם בצד ימין. חשוב במיוחד
כמו פריסות כאלה, המנופחות כמה פעמים עוברות אופטימיזציה,
יתרונות הביצועים מוכפלים.
![תמונה שבה מוצג פריט אחד ברשימה: תמונה אחת ושני טקסטים מיושרים אנכית](https://developer.android.google.cn/static/images/training/layout-listitem.png?authuser=0000&hl=he)
RecyclerView
בכלי לבדיקת הפריסה מוצגת רשימה של המכשירים הזמינים והפועלים שלהם רכיבים. בוחרים את הרכיב הרצוי בכרטיסייה Windows ולוחצים על בודק הפריסה כדי להציג את היררכיית הפריסה של הרכיב שנבחר. לדוגמה, איור 2 מציג את הפריסה של הפריט ברשימה לפי איור 1.
![תמונה של 'בודק הפריסה' וההרכבה של פריסה לינארית](https://developer.android.google.cn/static/images/training/hierarchy-linearlayout.png?authuser=0000&hl=he)
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>
בדיקה של הפריסה החדשה נראית כך:
![תמונה של הכלי לבדיקת פריסה בתלת-ממד](https://developer.android.google.cn/static/images/training/layout_inspector.png?authuser=0000&hl=he)
היתרונות של אפשרות זו מוכפלים, שכן הפריסה הזו משמשת פריט ברשימה.
רוב ההבדל נובע מהשימוש ב-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](https://developer.android.google.cn/static/images/training/lint.png?authuser=0000&hl=he)
איתור השגיאות בקוד יכול לתקן באופן אוטומטי בעיות מסוימות, לספק הצעות לבעיות אחרות לדלג ישירות אל הקוד הפוגעני לצורך בדיקה.
מידע נוסף זמין במאמר הבא: פריסות וגם פריסה מקור מידע.