שיפור זמן האחזור של ההפעלה

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

שיטות מומלצות

משלוח עם פרופיל Baseline

פרופילים של קו בסיס משפרים את מהירות הביצוע של הקוד בכ-30% מההפעלה הראשונה, כי הם מאפשרים להימנע מפעולות של פרשנות והידור JIT (בזמן אמת) עבור נתיבי קוד שכלולים בהם. כשמצרפים פרופיל בסיסי לאפליקציה, ‏Android Runtime (ART) יכול לבצע אופטימיזציה של נתיבי הקוד שכלולים באפליקציה באמצעות קומפילציה מראש (AOT). כך משפרים את הביצועים לכל משתמש חדש ולכל עדכון של האפליקציה.

הימנעות מאתחול מוקדם

מומלץ להימנע מביצוע פעולות מוקדמות שאולי לא נחוצות ברצף ההפעלה של האפליקציה. התרחיש הסביר ביותר להפעלת תהליך על ידי האפליקציה הוא הפעלת האפליקציה. עם זאת, WorkManager,‏ JobScheduler,‏ BroadcastReceiver, שירותים מאוגדים וספריית ההפעלה של AndroidX יכולים גם להפעיל תהליכים של אפליקציות ברקע. אם אפשר, כדאי להימנע מפעולות אתחול מיותרות של רכיבים בכיתה Application. ספריות רבות מציעות אתחול לפי דרישה, שמאפשר להפעיל אותן רק כשצריך.

העברת משימות משרשור ממשק המשתמש לשרשור ברקע

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

ניתוח ותיקון של בעיות חמורות שקשורות לתחרות על גישה לקריאת נתונים מהדיסק

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

הימנעות מתקשורת בין תהליכים (IPC) סינכרונית

הרבה פעמים הפסקות ארוכות בהרצת האפליקציה נגרמות בגלל קריאות ל-Binder, שהוא מנגנון התקשורת בין תהליכים (IPC) ב-Android. בגרסאות עדכניות של Android, זו אחת הסיבות הנפוצות ביותר להפסקת הפעולה של ה-UI Thread. בדרך כלל, הפתרון הוא להימנע מהפעלת פונקציות שמבצעות קריאות ל-binder. אם אי אפשר להימנע מכך, צריך לשמור את הערך במטמון או להעביר את העבודה לשרשורים ברקע. מידע נוסף זמין במאמר בנושא עיכובים בתזמון של שרשורים.