Bu, CLLocationManager belgelerinden startMonitoringSignificantLocationChanges ile uygulama davranışını açıklayan bölümdür :
Bu hizmeti başlatırsanız ve uygulamanız sonradan sonlandırılırsa, sistem yeni bir olay gelirse uygulamayı otomatik olarak arka planda yeniden başlatır. Böyle bir durumda, uygulamaya geçirilen seçenekler sözlüğü: didFinishLaunchingWithOptions: uygulama temsilcinizin yöntemi, uygulamanızın bir konum olayı nedeniyle başlatıldığını belirtmek için UIApplicationLaunchOptionsLocationKey anahtarını içerir. Yeniden başlatmanın ardından, yine de bir konum yöneticisi nesnesi yapılandırmanız ve konum olaylarını almaya devam etmek için bu yöntemi çağırmanız gerekir. Konum hizmetlerini yeniden başlattığınızda, mevcut olay temsilcinize hemen teslim edilir. Ek olarak, konum yöneticisi nesnenizin konum özelliği, siz konum hizmetlerini başlatmadan önce en son konum nesnesiyle doldurulur.
Benim anlayış, uygulama sonlanır (aramıyorsun eğer ben varsayarsak olmasıdır Yani stopMonitoringSignificantLocationChanges gelen applicationWillTerminate ) Bir ile uyandı alacak UIApplicationLaunchOptionsLocationKey için parametre didFinishLaunchingWithOptions: Uygulama . Bu noktada size oluşturmak CLLocationManager , çağrı startMonitoringSignificantLocationChanges ve için arka planda konum işlem yapmak sınırlı bir süre . Bu yüzden bu konuda iyiyim.
Önceki paragraf yalnızca uygulama sonlandırıldığında ne olacağı hakkında konuşur, uygulama askıya alındığında ne yaptığınız hakkında bir fikir vermez. DidFinishLaunchingWithOptions dokümantasyonu şunu söylüyor:
Uygulama arka planda konum güncellemelerini izler, temizlendi ve şimdi yeniden başlatıldı. Bu durumda sözlük, uygulamanın yeni bir konum olayı nedeniyle yeniden başlatıldığını belirten bir anahtar içerir.
Bu aramayı yalnızca sonlandırıldıktan sonra uygulamanız başlatıldığında (bir konum değişikliği nedeniyle) alacağınızı öneriyoruz.
Ancak üzerinde paragraf Anlamlı Değişim Servisi de yer Bilinci Programlama Kılavuzu söylemek için aşağıdaki etti:
Bu hizmeti çalışır durumda bırakırsanız ve uygulamanız daha sonra askıya alınır veya sonlandırılırsa, hizmet yeni konum verileri geldiğinde uygulamanızı otomatik olarak uyandırır. Uyanma zamanında uygulamanız arka plana alınır ve konum verilerini işlemesi için kısa bir süre verilir. Uygulamanız arka planda olduğu için, asgari düzeyde çalışmalı ve tahsis edilen süre sona ermeden önce geri dönmesini engelleyebilecek herhangi bir görevden (ağı sorgulama gibi) kaçınmalıdır. Aksi takdirde, başvurunuz sonlandırılabilir.
Bu, uygulamanız askıya alınmışsa, ancak nasıl uyandığınızdan bahsetmiyorsa konum verileriyle uyandığınızı gösterir:
- Does UIApplicationDelegate bir arka plan haline askıya alınmış durumda çıkıldıktan ettiğimi söyleyip bir geri arama almak?
- Konum yöneticisi (uygulama askıya alındığında donmuştu ) locationManager: didUpdateToLocation: fromLocation geri aramalarını almaya başlıyor mu?
- DidUpdateToLocation mesajımda uygulama durumunu kontrol eden ve arka plan modundaysa minimum işlem yapan kodu uygulamam gerekir mi?
Bunu yazma sürecinde, sanırım kendi sorumu yanıtlamış olabilirim, ancak bu konudaki anlayışımın daha bilgili biri tarafından onaylanması harika olur.