אופטימיזציה של תצוגה בהתאמה אישית

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

האצת התצוגה

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

בנוסף לשיפור היעילות של onDraw(), חשוב לוודא שהקריאה לפונקציה הזו מתבצעת בתדירות הנמוכה ביותר האפשרית. רוב השיחות אל onDraw() הן תוצאה של שיחה אל invalidate(), לכן כדאי לבטל שיחות מיותרות אל invalidate().

פעולה יקרה מאוד נוספת היא מעבר בין פריסות. כשמתבצעת קריאה לצפייה requestLayout(), מערכת ממשק המשתמש של Android עוברת על כל היררכיית התצוגה כדי לקבוע את הגודל של כל תצוגה. אם המערכת מוצאת מדידות סותרות, היא עשויה לעבור על ההיררכיה כמה פעמים. מעצבי ממשקי משתמש יוצרים לפעמים היררכיות עמוקות של אובייקטים מוטמעים מסוג ViewGroup. היררכיות עמוקות של תצוגות גורמות לבעיות בביצועים, ולכן חשוב ליצור היררכיות שטוחות ככל האפשר של תצוגות.

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

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