אופטימיזציה של השימוש בזיכרון לתצוגת השעון

כדי להאריך את חיי הסוללה ככל האפשר במכשירי Wear OS, המערכת מבצעת חישוב של השימוש בזיכרון. כחלק מהנחיות האיכות לאפליקציות Wear OS, בתצוגות השעון לשימוש ב-Watch Face Format יש מגבלות על נפח הזיכרון שהן יכולות לצרוך, בהתאם למצב הנוכחי של השעון:

  • במצב אווירה, תצוגת השעון לא יכולה לצרוך יותר מ-10MB של זיכרון.
  • במצב אינטראקטיבי, תצוגת השעון לא יכולה לצרוך יותר מ-100MB של זיכרון.

המערכת מחשבת את השימוש בזיכרון של תצוגת השעון

כדי לחשב את הגודל של תמונה או גופן בפורמט BMP בתצוגת שעון שמשתמשת בפורמט של תצוגת שעון, המערכת מבצעת את השלבים הבאים:

  1. מבטל את דחיסת התמונה או הגופן של מפת סיביות (bitmap).
  2. המערכת בודקת את התמונה או את הגופן בפורמט bitmap כדי לראות אם אפשר לבצע אופטימיזציה שלהם באחת מהדרכים הבאות:
    • גודל התמונה השתנה כדי להתאים בצורה טובה יותר לגודל התצוגה.
    • תמונה חתוכה כדי להסיר פיקסלים שקופים לחלוטין.
    • דגימה לאחור ל-RGB565, אם ניתן לעשות זאת בלי אובדן איכות.

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

  • בתמונות ובגופנים שמשתמשים ב-RGBA8888: \( 4 \times width \times height \)
  • לתמונות ולגופנים שנעשה בהם שימוש ב-RGB565: \( 2 \times width \times height \)
  • לתמונות ולגופנים שמשתמשים בהגדרת הביומפס ALPHA_8: \( width \times height \)

מצב אינטראקטיבי

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

  1. הגודל הלא מעובד של גופנים וקטוריים.
  2. השימוש המשוער בגופן ברירת המחדל של המערכת.
  3. הגודל הכולל של התמונות וגופני מפת סיביות (bitmap) אחרי שהוחלו כל חיתוך, שינוי גודל או עיצוב מחדש.

הגדרות אישיות

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

מצב רגישות לסביבה ושכבות

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

  1. כל מה שנמצא מתחת לרכיבי השעון. רוב 'הגוף' של תצוגת השעון מורכב בשכבה הזו. לא משנה כמה תמונות משמשות לשרטוט השכבה הזו, המערכת סופרת אותה כתמונה אחת במסך מלא.
  2. כל שעון עם ספרות, תצוגה דיגיטלית או רכיבים עם קישורים לפלטפורמות שמריצים רינדור דינמי.
  3. כל הרכיבים שמפורטים אחרי ידיים השעון ורכיבים נוספים בקובץ ה-XML המקורי.

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

שיטות לצמצום השימוש בזיכרון

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

חיתוך וגיבוב של גופנים בפורמט bitmap

חותכים את התמונות ואת האובייקטים BitmapFont, ומשנים את הגודל שלהם בהתאם לגודל התצוגה.

כשמערכת Wear OS מציירת תצוגת שעון, כל התמונות עוברות דחיסה. תמונה במסך מלא ריקה בדרך כלל עשויה לצרוך 3 KB בדיסק. אבל אם היא מוצגת במסך של 450 x 450 פיקסלים, המערכת מבטלת את הדחיסה של התמונה ומגדילה את גודל התמונה לזיכרון ל-750KB או יותר.

שימוש בגבהים עקביים של גופנים בפורמט bitmap

כשמשתמשים ב-BitmapFont, כל התמונות של דמות צריכות להיות באותו גובה. כמו כן, כל התמונות של המילים צריכות להיות בגובה זהה.

שימוש בגדלים עקביים של פריימים באנימציות

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

הטכניקה הזו מקטינה את גודל תיבת הגבול שהמערכת מחשבת לאנימציה.

ביטול כפילויות בתמונות

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

הצגת ההתקדמות באמצעות קשתות

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

<PartDraw angle="0" width="400" height="400" name="ProgressBar"
          pivotX="0.5" pivotY="0.5 x="40" y="40">
    <Arc centerX="200" centerY="200" width="400" height="400"
         startAngle="0" endAngle="360">
        <!-- Completes a "progress loop" every minute. -->
        <Transform target="endAngle"
                   value="0 + (clamp([SECOND], 0, 60) - 0) * 6" />
        <Stroke cap="ROUND" color="#123456" thickness="10" />
    </Arc>
</PartDraw>

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

מיקום של תכונות נוספות בשעון ושל המחוגים בסוף קובץ המקור

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

הערכת השימוש בזיכרון של תצוגת השעון

כדי למדוד את השימוש בזיכרון של תצוגת השעון, אפשר להשתמש בכלי להערכת טביעת הזיכרון, שזמין במאגר watchface ב-GitHub.

  • הערה: טקסט הקישור מוצג כש-JavaScript מושבת
  • Arc
  • Line
  • מלבן