بهینه‌سازی استفاده از مکان برای سناریوهای دنیای واقعی

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

به‌روزرسانی‌های پیش‌زمینه یا قابل‌مشاهده برای کاربر

مثال: برنامه نقشه‌برداری که به به‌روزرسانی‌های مکرر و دقیق با تأخیر بسیار کم نیاز دارد. همه به‌روزرسانی‌ها در پیش‌نما اتفاق می‌افتد: کاربر فعالیتی را شروع می‌کند، داده‌های مکان را مصرف می‌کند، و سپس فعالیت را پس‌از مدت کوتاهی متوقف می‌کند.

از روش setPriority() با مقدار PRIORITY_HIGH_ACCURACY یا PRIORITY_BALANCED_POWER_ACCURACY استفاده کنید.

فاصله زمانی مشخص‌شده در روش setInterval() به مورد استفاده بستگی دارد: برای سناریوهای هم‌زمان، مقدار را روی چند ثانیه تنظیم کنید؛ درغیراین‌صورت، آن را به چند دقیقه محدود کنید (برای به‌حداقل رساندن مصرف باتری، تقریباً دو دقیقه یا بیشتر توصیه می‌شود).

دانستن مکان دستگاه

مثال: برنامه آب‌وهوا می‌خواهد مکان دستگاه را بداند.

از روش getLastLocation() استفاده کنید که جدیدترین مکان دردسترس را برمی‌گرداند (که در موارد نادر ممکن است تهی باشد). این روش راهی ساده برای دریافت مکان ارائه می‌دهد و هزینه‌های مرتبط با درخواست فعالانه به‌روزرسانی‌های مکان را متحمل نمی‌شود. از آن در ترکیب با روش isLocationAvailable() استفاده کنید که وقتی مکان برگردانده‌شده توسط getLastLocation() به‌طور منطقی به‌روز باشد، true را برمی‌گرداند.

شروع به‌روزرسانی‌ها وقتی کاربر در مکان خاصی است

مثال: درخواست به‌روزرسانی وقتی کاربر در فاصله مشخصی از محل کار، خانه، یا مکان دیگری قرار دارد.

از حصارکشی جغرافیایی همراه با به‌روزرسانی‌های ارائه‌دهنده تلفیقی مکان استفاده کنید. وقتی برنامه راه‌انداز ورود به حصار جغرافیایی را دریافت می‌کند، به‌روزرسانی درخواست کنید و وقتی برنامه راه‌انداز خروج از حصار جغرافیایی را دریافت می‌کند، به‌روزرسانی‌ها را بردارید. این کار تضمین می‌کند که برنامه فقط زمانی به‌روزرسانی‌های مکان دقیق‌تری دریافت می‌کند که کاربر وارد منطقه تعریف‌شده‌ای شده باشد.

گردش کار معمول برای این سناریو می‌تواند شامل نمایش اعلان در انتقال ورود به حصار جغرافیایی و راه‌اندازی فعالیتی باشد که حاوی کد درخواست به‌روزرسانی هنگام ضربه زدن کاربر روی اعلان است.

شروع به‌روزرسانی‌ها براساس وضعیت فعالیت کاربر

مثال: درخواست به‌روزرسانی فقط زمانی که کاربر درحال رانندگی یا دوچرخه‌سواری است.

از Activity Recognition API در ارتباط با به‌روزرسانی‌های ارائه‌دهنده تلفیقی مکان استفاده کنید. وقتی فعالیت هدف‌یابی‌شده شناسایی شد، به‌روزرسانی‌ها را درخواست کنید و وقتی کاربر انجام آن فعالیت را متوقف کرد، به‌روزرسانی‌ها را بردارید.

گردش کار معمول برای این مورد استفاده می‌تواند شامل نمایش اعلان برای فعالیت شناسایی‌شده و راه‌اندازی فعالیتی باشد که حاوی کد درخواست به‌روزرسانی هنگام ضربه زدن کاربر روی اعلان است.

به‌روزرسانی‌های مکان پس‌زمینه‌ای طولانی‌مدت مرتبط با مناطق جغرافیایی

مثال: کاربر می‌خواهد وقتی دستگاه در مجاورت خرده‌فروشی قرار می‌گیرد به او اطلاع داده شود.

این مورد استفاده عالی برای حصار جغرافیایی است. چون مورد استفاده تقریباً به‌طور قطع شامل مکان پس‌زمینه‌ای است، از روش addGeofences(GeofencingRequest, PendingIntent) استفاده کنید.

باید گزینه‌های پیکربندی زیر را تنظیم کنید:

  • اگر درحال ردیابی انتقال‌های توقف هستید، از روش setLoiteringDelay() استفاده کنید و مقداری حدود پنج دقیقه یا کمتر را ارسال کنید.

  • از setNotificationResponsiveness() استفاده کنید و مقدار حدود پنج دقیقه را ارسال کنید. بااین‌حال، اگر برنامه‌تان می‌تواند تأخیر اضافی در پاسخ‌گویی را مدیریت کند، استفاده از مقدار تقریباً ده دقیقه را درنظر بگیرید.

برنامه می‌تواند حداکثر ۱۰۰ حصار جغرافیایی را به‌طور هم‌زمان ثبت کند. در مورداستفاده‌ای که برنامه‌ای می‌خواهد تعداد زیادی از گزینه‌های خرده‌فروش را ردیابی کند، برنامه ممکن است بخواهد حصار جغرافیایی بزرگی (در سطح شهر) ثبت کند و حصارهای جغرافیایی کوچک‌تری (برای مکان‌های داخل شهر) را به‌طور پویا برای فروشگاه‌های داخل حصار جغرافیایی بزرگ‌تر ثبت کند. وقتی کاربر وارد حصار جغرافیایی بزرگی می‌شود، حصارهای جغرافیایی کوچک‌تری اضافه کنید؛ وقتی کاربر از حصار جغرافیایی بزرگ‌تر خارج می‌شود، حصارهای جغرافیایی کوچک‌تر را بردارید و حصارهای جغرافیایی را برای منطقه جدیدی دوباره ثبت کنید.

به‌روزرسانی‌های مکان در پس‌زمینه که برای مدت طولانی اجرا می‌شوند بدون اینکه مؤلفه برنامه قابل‌مشاهده باشد

مثال: برنامه‌ای که مکان را به‌طور غیرفعال ردیابی می‌کند

درصورت امکان، از روش setPriority() با گزینه PRIORITY_NO_POWER استفاده کنید زیرا تقریباً هیچ شارژ باتری‌ای مصرف نمی‌کند. اگر استفاده از PRIORITY_NO_POWER امکان‌پذیر نیست، از PRIORITY_BALANCED_POWER_ACCURACY یا PRIORITY_LOW_POWER استفاده کنید، اما از PRIORITY_HIGH_ACCURACY برای کار پس‌زمینه پایدار استفاده نکنید زیرا این گزینه باتری را به‌طور قابل‌توجهی خالی می‌کند.

اگر به داده‌های مکان بیشتری نیاز دارید، با فراخوانی روش setFastestInterval() و ارسال مقداری کوچک‌تر از آنچه به setInterval() ارسال می‌کنید، از مکان منفعل استفاده کنید. وقتی با گزینه PRIORITY_NO_POWER ترکیب شود، مکان غیرفعال می‌تواند به‌طور فرصت‌طلبانه مکان محاسبه‌شده توسط برنامه‌های دیگر را بدون هزینه اضافی ارائه دهد.

بااستفاده از روش setMaxWaitTime()، با افزودن مقداری تأخیر، فرکانس را تعدیل کنید. برای مثال، اگر از روش setinterval() با مقدار تقریباً ۱۰ دقیقه استفاده می‌کنید، باید فراخوانی setMaxWaitTime() را با مقداری بین ۳۰ تا ۶۰ دقیقه درنظر بگیرید. بااستفاده از این گزینه‌ها، مکان تقریباً هر ۱۰ دقیقه یک‌بار برای برنامه‌تان محاسبه می‌شود، اما برنامه فقط هر ۳۰ تا ۶۰ دقیقه یک‌بار با برخی‌از داده‌های مکان که به‌صورت به‌روزرسانی گروهی دردسترس است بیدار می‌شود. این رویکرد تأخیر را با داده‌های دردسترس بیشتر و عملکرد بهتر باتری معاوضه می‌کند.

به‌روزرسانی‌های مکرر با دقت بالا درحالی‌که کاربر با برنامه‌های دیگر تعامل دارد

مثال: برنامه ناوبری یا تناسب اندامی که وقتی کاربر صفحه‌نمایش را خاموش می‌کند یا برنامه دیگری را باز می‌کند، همچنان به کار کردن ادامه می‌دهد.

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