תובנות לגבי משחקים עם נפח זיכרון נמוך

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

המידע, התובנות והשיטות המומלצות שיעזרו לכם להשתמש טוב יותר בזיכרון של המשחק:

  • שימוש ב-ApplicationExitInfo – ה-API הזה ל-Java/Kotlin מחזיר את הסיבה לכך שמערכת Android הפסיקה את ההפעלה הקודמת של המשחק. משתמשים ב-ApplicationExitInfo כדי לבדוק אם יש מחסור בזיכרון כסיבה לתהליך קודם להפעלת מוות. בודקים אם המשחק נהרג בגלל מחסור בזיכרון, כדי לבצע אופטימיזציה של המשחק כך שישתמש בפחות זיכרון במכשיר הזה.
  • בודקים את נפח ה-RAM הפיזי הכולל – כדי למנוע סגירת משחקים כשהם בחזית, וכדי להתאים את היכולות של המכשיר, בודקים את נפח ה-RAM הפיזי הכולל ומתאימים את השימוש בזיכרון של המשחקים בהתאם. אם המטרה היא למנוע סגירת אפליקציות זמן קצר אחרי שהן עוברות לרקע (כדי לאפשר למשתמש לבצע כמה משימות בו-זמנית), אפשר להשתמש בקריאות החזרה (callbacks) של trim (במיוחד TRIM_MEMORY_UI_HIDDEN) כדי לצמצם את השימוש בזיכרון במשחק.
  • אל תירשמו לאירועי קריאה חוזרת (callbacks) של trim שהוצאו משימוש – ל-Android אין ממשקי API לזיהוי אירועי לחץ בזיכרון מקומי כשהם נתקלים במגבלות זיכרון (ראו את ההסבר על Low memory killer daemon). קריאות חזרה (callbacks) קטועות לא עזרו למנוע סגירת תהליכים בגלל מחסור בזיכרון, ולכן ב-Android הוצאו משימוש את כולן, מלבד TRIM_MEMORY_UI_HIDDEN ו-TRIM_MEMORY_BACKGROUND.

Low memory killer daemon

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

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

מידע נוסף על הדימון להוצאה משימוש של תהליכים עם זיכרון נמוך