Ini adalah bagian dari dokumentasi CLLocationManager yang menjelaskan perilaku aplikasi dengan startMonitoringSignificantLocationChanges :
Jika Anda memulai layanan ini dan aplikasi Anda kemudian dihentikan, sistem secara otomatis meluncurkan kembali aplikasi ke latar belakang jika acara baru tiba. Dalam kasus seperti itu, kamus opsi diteruskan ke application: didFinishLaunchingWithOptions: metode delegasi aplikasi Anda berisi kunci UIApplicationLaunchOptionsLocationKey untuk menunjukkan bahwa aplikasi Anda diluncurkan karena peristiwa lokasi. Setelah peluncuran ulang, Anda masih harus mengonfigurasi objek pengelola lokasi dan memanggil metode ini untuk terus menerima peristiwa lokasi. Saat Anda memulai ulang layanan lokasi, acara saat ini dikirimkan ke delegasi Anda segera. Selain itu, properti lokasi objek pengelola lokasi Anda diisi dengan objek lokasi terbaru bahkan sebelum Anda memulai layanan lokasi.
Jadi pemahaman saya adalah bahwa jika aplikasi Anda berhenti (dan saya berasumsi jika Anda tidak memanggil stopMonitoringSignificantLocationChanges dari applicationWillTerminate ) Anda akan terbangun dengan parameter UIApplicationLaunchOptionsLocationKey ke application: didFinishLaunchingWithOptions . Kemudian Anda membuat CLLocationManager , panggil startMonitoringSignificantLocationChanges dan lakukan pemrosesan lokasi latar belakang untuk terbatas . Jadi saya baik-baik saja dengan bagian ini.
Paragraf sebelumnya hanya berbicara tentang apa yang terjadi ketika aplikasi dihentikan, tidak menyarankan apa yang Anda lakukan ketika aplikasi ditangguhkan. Dokumentasi untuk didFinishLaunchingWithOptions mengatakan:
Aplikasi melacak pembaruan lokasi di latar belakang, dihapus, dan sekarang telah diluncurkan kembali. Dalam kasus ini, kamus berisi kunci yang menunjukkan bahwa aplikasi diluncurkan kembali karena acara lokasi baru.
Menyarankan bahwa Anda hanya akan menerima panggilan ini saat aplikasi Anda diluncurkan (karena perubahan lokasi) setelah Anda dihentikan.
Namun paragraf di Layanan Perubahan Signifikan dalam Panduan Pemrograman Kesadaran Lokasi mengatakan hal berikut:
Jika Anda membiarkan layanan ini berjalan dan aplikasi Anda kemudian ditangguhkan atau dihentikan, layanan secara otomatis membangunkan aplikasi Anda saat data lokasi baru tiba. Saat bangun, aplikasi Anda diletakkan di latar belakang dan diberi sedikit waktu untuk memproses data lokasi. Karena aplikasi Anda berada di latar belakang, aplikasi tersebut harus melakukan pekerjaan minimal dan menghindari tugas apa pun (seperti membuat kueri jaringan) yang mungkin mencegahnya kembali sebelum waktu yang dialokasikan berakhir. Jika tidak, aplikasi Anda dapat dihentikan.
Ini menunjukkan Anda dibangunkan dengan data lokasi jika aplikasi Anda telah ditangguhkan, tetapi gagal menyebutkan bagaimana Anda dibangunkan:
- Apakah itu UIApplicationDelegate mendapatkan panggilan balik yang memberi tahu saya bahwa saya melanjutkan dari status ditangguhkan ke status latar belakang?
- Apakah pengelola lokasi (yang dibekukan saat aplikasi ditangguhkan) mulai menerima callback locationManager: didUpdateToLocation: fromLocation ?
- Apakah saya hanya perlu menerapkan kode dalam pesan didUpdateToLocation saya yang memeriksa status aplikasi dan melakukan pemrosesan minimal jika dalam mode latar belakang?
Dalam proses penulisan ini, saya pikir saya mungkin baru saja menjawab pertanyaan saya sendiri, tetapi akan sangat bagus jika pemahaman saya tentang ini dikonfirmasi oleh seseorang yang lebih berpengetahuan.