אופטימיזציה של השימוש במיקום לשמירה על חיי הסוללה

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

הסרת עדכוני מיקום

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

זה יכול לקרות אם השיטות onStart() או onResume() של מחזור החיים של פעילות מסוימת מכילות קריאה ל-requestlocationUpdates() בלי קריאה תואמת ל-removeLocationUpdates() בשיטות onPause() או onStop() של מחזור החיים.

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

הגדרת זמני קצוב לתפוגה

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

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

כדי להוסיף זמן קצוב לתפוגה לבקשת מיקום של גבול וירטואלי, צריך לבצע קריאה ל-method‏ setExpirationDuration().

בקשות באצווה

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

Kotlin

val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
.setMaxUpdateDelayMillis(60 * 60 * 1000)
.build()

Java

LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10 * 60 * 1000)
    .setMaxUpdateDelayMillis(60 * 60 * 1000)
    .build();

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

שימוש בעדכוני מיקום פסיביים

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

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

Kotlin

val request = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
.setMinUpdateIntervalMillis(2 * 60 * 1000)
.build()

Java

LocationRequest request = new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 15 * 60 * 1000)
    .setMinUpdateIntervalMillis(2 * 60 * 1000)
    .build();

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

השימוש במיקום באופן פסיבי לא גורם להתרוקנות הסוללה, אבל צריך להיזהר במקרים שבהם קבלת נתוני מיקום מפעילה פעולות יקרות של מעבד (CPU) או קלט/פלט (I/O). כדי למזער את עלויות הסוללה, המרווח שצוין ב-setMinUpdateIntervalMillis() לא צריך להיות קטן מדי.