استفاده از حافظه را برای صفحه ساعت خود بهینه کنید

برای ارائه بهترین عمر باتری دستگاه های Wear OS، سیستم محاسبه میزان مصرف حافظه را انجام می دهد. به عنوان بخشی از دستورالعمل‌های کیفیت برنامه Wear OS ، چهره‌های ساعتی که از فرمت Watch Face استفاده می‌کنند، بسته به وضعیت فعلی ساعت، محدودیت‌هایی در میزان حافظه مصرفی دارند:

  • در حالت محیطی ، صفحه ساعت نمی تواند بیش از 10 مگابایت حافظه مصرف کند.
  • در حالت تعاملی، صفحه ساعت نمی تواند بیش از 100 مگابایت حافظه مصرف کند.

سیستم میزان استفاده از حافظه ساعت را محاسبه می کند

برای محاسبه اندازه گرفته شده توسط یک تصویر یا فونت بیت مپ در یک صفحه ساعت که از فرمت Watch Face استفاده می کند، سیستم مراحل زیر را تکمیل می کند:

  1. تصویر یا فونت بیت مپ را از حالت فشرده خارج می کند.
  2. تصویر یا فونت بیت مپ را بررسی می کند تا ببیند آیا می توان آن را به یکی از روش های زیر بهینه کرد:
    • تغییر اندازه برای مطابقت بهتر با اندازه نمایشگر آن.
    • برای حذف پیکسل های کاملا شفاف برش داده شده است.
    • در صورتی که بدون از دست دادن وفاداری انجام شود، نمونه برداری به RGB565 کاهش یافت.

بر اساس کادر محدود به دست آمده، سیستم اندازه تصویر یا فونت بیت مپ را بر حسب بایت به صورت یکی از موارد زیر محاسبه می کند:

  • برای تصاویر و فونت هایی که از RGBA8888 استفاده می کنند: \( 4 \times width \times height \)
  • برای تصاویر و فونت هایی که از RGB565 استفاده می کنند: \( 2 \times width \times height \)
  • برای تصاویر و فونت هایی که از پیکربندی بیت مپ ALPHA_8 استفاده می کنند:\( width \times height \)

حالت تعاملی

هنگام محاسبه میزان مصرف حافظه برای حالت تعاملی، سیستم مجموع موارد زیر را محاسبه می کند:

  1. اندازه پردازش نشده هر فونت برداری .
  2. استفاده تخمینی از فونت پیش فرض سیستم.
  3. اندازه کل تصاویر و فونت های بیت مپ پس از هر گونه برش، تغییر اندازه یا فرمت مجدد اعمال شده است.

پیکربندی

برای صفحه‌های ساعت که دارای پیکربندی هستند، سیستم تلاش می‌کند تا اندازه کل منابع مورد استفاده در پیکربندی‌های مختلف را محاسبه کند. گاهی اوقات، هنگامی که تعداد بسیار زیادی از ترکیب ها وجود دارد، سیستم کمی بیش از حد برآورد می کند که چه تعداد منابع به طور همزمان در پیکربندی های مختلف استفاده می شود.

حالت محیطی و لایه ها

برای حالت محیطی، سیستم فرض می‌کند که ساعت با استفاده از حداکثر سه لایه تمام صفحه نمایش داده می‌شود که دو لایه کاملاً ثابت هستند:

  1. همه چیز زیر عناصر ساعت بیشتر "بدنه" صفحه ساعت در این لایه ترکیب شده است. مهم نیست که چند تصویر برای ترسیم این لایه استفاده شده است. سیستم آن را به عنوان یک تصویر تمام صفحه حساب می کند.
  2. هر عقربه ساعت، صفحه نمایش دیجیتال، یا عوارض با اتصالات پلت فرم که به صورت پویا ارائه می شوند.
  3. تمام عناصری که بعد از عقربه های ساعت و عوارض در فایل XML منبع فهرست شده اند.

به طور معمول، بیشتر استفاده از حافظه در حالت محیطی از فونت های بیت مپ، به ویژه فونت های بزرگ می آید.

روش های کاهش مصرف حافظه

با پیروی از پیشنهادات این بخش، به احتمال زیاد صفحه ساعتی ایجاد می‌کنید که مصرف حافظه آن در این محدودیت‌ها باقی بماند.

برش و تغییر اندازه فونت های بیت مپ

تصاویر و اشیای BitmapFont خود را برش دهید و اندازه آنها را متناسب با اندازه نمایش آنها تغییر دهید.

وقتی Wear OS یک صفحه ساعت می‌کشد، همه تصاویر از حالت فشرده خارج می‌شوند. یک تصویر تمام صفحه که عمدتاً خالی است ممکن است 3 کیلوبایت روی دیسک مصرف کند، اما اگر روی صفحه نمایش 450 در 450 پیکسل نمایش داده شود، سیستم تصویر را از حالت فشرده خارج می کند و اندازه تصویر را در حافظه به 750 کیلوبایت یا بزرگتر افزایش می دهد.

از ارتفاع فونت بیت مپ ثابت استفاده کنید

هنگام استفاده از BitmapFont ، تمام تصاویر برای یک کاراکتر باید هر کدام دارای ارتفاع یکسانی باشند. به همین ترتیب، تمام تصاویر برای کلمات باید هر کدام دارای ارتفاع یکسانی باشند.

از اندازه های ثابت فریم در انیمیشن ها استفاده کنید

به جای جابجایی تصویر روی صفحه ساعت، عناصر داخل تصویر را به روز کنید و کادر محدود آن را در همان مکان نسبت به صفحه ساعت نگه دارید. به عنوان مثال، اگر می خواهید دایره ای را روی صفحه ساعت خود متحرک کنید، به جای چرخاندن دایره روی صفحه ساعت، رنگ دایره را تغییر دهید.

این تکنیک اندازه جعبه مرزی را که سیستم برای انیمیشن محاسبه می کند کاهش می دهد.

تصاویر تکراری

اگر صفحه ساعت شما چندین نسخه از یک تصویر را نمایش می دهد، فقط یک کپی از آن تصویر را در فهرست منابع خود قرار دهید و چندین بار به آن ارجاع دهید.

نمایش پیشرفت با استفاده از کمان

برای شبیه سازی نوار پیشرفتی که بعد از 1 دقیقه یا بعد از 1 ساعت کامل می شود، از 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 موجود است، استفاده کنید.

{% کلمه به کلمه %} {% آخر کلمه %}
  • توجه: وقتی جاوا اسکریپت خاموش است، متن پیوند نمایش داده می شود
  • قوس
  • خط
  • مستطیل
{% کلمه به کلمه %}
{% آخر کلمه %}