Cara terbaik mendapatkan Lokasi GPS di latar belakang untuk Android API level 30 dan yang lebih tinggi
Nov 30 2020
Aplikasi saya menentukan batas kecepatan berdasarkan lokasi pengguna dan memberi tahu pengguna jika dia telah melampauinya. Dimulai dengan Android API level 30 dan yang lebih tinggi, Google telah mendefinisikan IntentService sebagai tidak digunakan lagi dan menyarankan penggunaan WorkManager atau JobIntentService dan juga menyatakan bahwa perlu untuk bermigrasi dari Firebase JobDispatcher ke WorkManager. Saya melihat dua cara untuk mengatasi masalah ini:
- Mulai OneTimeWorkRequest dan tentukan untuk memulai ulang metode ini secara berkala dalam metode ini saat aplikasi berjalan di latar belakang.
- Jalankan PeriodicWorkRequest dengan interval minimum yang diizinkan selama 15 menit. Dalam metode ini, jalankan metode JobIntentService, yang berjalan hingga sekitar 10 menit , tetapi metode tersebut mungkin tidak berjalan atau mungkin dimusnahkan oleh sistem sebelum selesai.
Saya khawatir tentang:
- potensi kebocoran memori;
- potensi masalah dengan WorkManager atau JobIntentService saat berpindah dari latar depan ke latar belakang dan sebaliknya
- kemampuan untuk menggunakan pola MVVM
Jawaban
5 NikolaDespotoski Dec 07 2020 at 23:42
Saya lebih suka menggunakan opsi kedua, ini memberi Anda lebih banyak waktu di antara setiap penjadwalan ulang file Worker
.
Mengenai kekhawatiran Anda:
- Satu-satunya kebocoran yang mungkin terjadi adalah melakukan panggilan balik lokasi yang salah. Ini dapat dengan mudah dilacak, Anda tidak perlu terlalu khawatir tentang itu.
- Terjadwal
Worker
dimasukkan ke dalam database dan dijalankan secara independen dari aplikasi. Artinya, visibilitas pengguna aplikasi tidak berpengaruh. Dalam kasus Anda, saya anggap Anda ingin membatalkan pekerjaan terjadwal Anda setelah pengguna melanjutkan aplikasi, yang dikatakan Anda dapat menetapkantag
keWorker
dan menghapus jadwal atau yang sedang berjalan setelah terlihat oleh pengguna. - Saya lebih suka untuk tetap
Worker
terisolasi dari MVVM dan hanya menyuntikkan kasus penggunaan / interaksi pada pekerja dan mengeksekusi kasus penggunaan / kueri interaksor.WorkerManager
menawarkan API yang bagus untuk menanyakanWorker
status, Anda mungkin perlu menulis kesamaan antara implementasi Anda sebelumnya dan untuk API> = 30. PerlakukanWorker
wadah eksekusi yang berbeda untuk kasus penggunaan Anda.