אופטימיזציה של זיכרון האפליקציה

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

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

שחרור זיכרון מטמון

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

תזמון משימות

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

דליפות זיכרון

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

טיפים נוספים

  • תמונות גדולות או משורטטות צורכות יותר זיכרון באפליקציות. כדי לצמצם את השימוש בזיכרון, צריך לזהות מפות סיביות גדולות או צבעוניות ולבצע בהן אופטימיזציה.
  • כשמפתחים לאנדרואיד (מהדורת Go), כדאי לנסות לבחור אפשרויות אחרות ל-GIF באפליקציה, כי קובצי GIF צורכים הרבה זיכרון.
  • אפשר להקטין את הגודל של קובצי PNG בלי לפגוע באיכות התמונה באמצעות כלים כמו WebP,‏ pngcrush ו-pngquant. כל הכלים האלה יכולים להקטין את גודל הקובץ בפורמט PNG תוך שמירה על איכות התמונה.
  • הכלי aapt יכול לבצע אופטימיזציה של משאבי התמונות שמוצבים ב-res/drawable/ באמצעות דחיסה ללא אובדן נתונים במהלך תהליך ה-build. לדוגמה, הכלי aapt יכול להמיר קובץ PNG בצבע אמיתי שלא דורש יותר מ-256 צבעים לקובץ PNG של 8 ביט עם פלטת צבעים. הפעולה הזו יוצרת תמונה באיכות זהה, אבל עם טביעת זיכרון קטנה יותר.