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:

  1. Mulai OneTimeWorkRequest dan tentukan untuk memulai ulang metode ini secara berkala dalam metode ini saat aplikasi berjalan di latar belakang.
  2. 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 Workerdimasukkan 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 menetapkan tagke Workerdan menghapus jadwal atau yang sedang berjalan setelah terlihat oleh pengguna.
  • Saya lebih suka untuk tetap Workerterisolasi dari MVVM dan hanya menyuntikkan kasus penggunaan / interaksi pada pekerja dan mengeksekusi kasus penggunaan / kueri interaksor. WorkerManagermenawarkan API yang bagus untuk menanyakan Workerstatus, Anda mungkin perlu menulis kesamaan antara implementasi Anda sebelumnya dan untuk API> = 30. Perlakukan Workerwadah eksekusi yang berbeda untuk kasus penggunaan Anda.