Android API स्तर 30 और उच्चतर के लिए पृष्ठभूमि में GPS स्थान पाने का सबसे अच्छा तरीका है

Nov 30 2020

मेरा आवेदन उपयोगकर्ता के स्थान द्वारा गति सीमा निर्धारित करता है और उपयोगकर्ता को बताता है कि क्या उसने इसे पार कर लिया है। Android API स्तर 30 और उच्चतर के साथ शुरू, Google ने IntentService को पदावनत के रूप में परिभाषित किया है और WorkManager या JobIntentService का उपयोग करने का सुझाव देता है और यह भी बताता है कि Firebase JobDispatcher से WorkManager में माइग्रेट करना आवश्यक है । मैं इस समस्या को हल करने के दो तरीके देखता हूं:

  1. OneTimeWorkRequest को प्रारंभ करें और इस पद्धति को समय-समय पर इस पद्धति को पुनरारंभ करने के लिए निर्दिष्ट करें, जबकि एप्लिकेशन पृष्ठभूमि में चल रहा है।
  2. 15 मिनट के न्यूनतम अनुमत अंतराल के साथ PeriodicWorkRequest चलाएं । इस विधि में, JobIntentService विधि को चलाएं, जो लगभग 10 मिनट तक चलती है , लेकिन विधि पूरी होने से पहले सिस्टम द्वारा नहीं चल सकती है या नष्ट नहीं हो सकती है।

मुझे चिंता है:

  • संभावित मेमोरी लीक;
  • पृष्ठभूमि और इसके विपरीत से अग्रभूमि से जाने पर WorkManager या JobIntentService के साथ संभावित समस्याएं
  • MVVM पैटर्न का उपयोग करने की क्षमता

जवाब

5 NikolaDespotoski Dec 07 2020 at 23:42

मैं दूसरे विकल्प के साथ जाना पसंद करूंगा, यह आपको प्रत्येक पुनर्निर्धारण के बीच अधिक समय देता है Worker

अपनी चिंताओं के बारे में:

  • केवल संभावित रिसाव स्थान कॉलबैक का कदाचार है। इसे आसानी से ट्रैक किया जा सकता है, आपको इसके बारे में बहुत अधिक चिंता नहीं करनी चाहिए।
  • अनुसूचित Workerको डेटाबेस में रखा जाता है और आवेदन के स्वतंत्र रूप से निष्पादित किया जाता है। जिसका अर्थ है, एप्लिकेशन की उपयोगकर्ता-दृश्यता पर कोई प्रभाव नहीं पड़ता है। आपके मामले में, मुझे लगता है कि उपयोगकर्ता द्वारा एप्लिकेशन को फिर से शुरू करने के बाद आप अपना निर्धारित कार्य रद्द करना चाहते हैं, कहा जा रहा है कि आप उपयोगकर्ता को एक बार दिखाई देने वाले किसी भी शेड्यूल या चालू होने वाले पर्स tagको असाइन कर सकते हैं Worker
  • मैं WorkerMVVM से अलग-थलग रहना पसंद करता हूं और कार्यकर्ता में उपयोग के मामलों / अंतःक्रियाओं को इंजेक्ट करता हूं और अंतःक्रिया करने वाले का उपयोग करते हैं। स्टेटस WorkerManagerको क्वेरी करने के लिए ठीक एपीआई प्रदान करता है Worker, आपको अपने पिछले कार्यान्वयन और एपीआई के लिए => 30 के बीच आम जमीन लिखने की आवश्यकता हो सकती है Worker। अपने उपयोग के मामले के लिए अलग निष्पादन कंटेनर के रूप में समझें ।