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

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

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

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

כדי לחשב את הגודל שמוגדל על ידי גופן של תמונה או גופן במפת סיביות (bitmap) בתצוגת שעון. משתמשת ב-Watch Face Format, המערכת משלימה את השלבים הבאים:

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

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

  • לתמונות ולגופנים שנעשה בהם שימוש ב-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), גדולים יותר.

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

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

חיתוך ושינוי גודל של גופן מפת סיביות (bitmap)

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

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

שימוש בגובה עקבי של גופן במפת סיביות (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 מושבת
  • קשת
  • Line (קו)
  • מלבן