मैं बैकएंड सेवा में लॉग भेजने के लिए जीसीएम नेटवर्क मैनेजर का उपयोग करने की कोशिश कर रहा हूं। हमारे पास एक घंटा है जो हर घंटे चल रहा है जो वनऑफ टास्क बनाता है, जब निष्पादित किया जाता है, तो लॉग संदेश के साथ बैकएंड सेवा को कॉल करेगा।जीसीएम नेटवर्क मैनेजर नौकरियां खोना
यह काम करता है, लेकिन कार्यों की एक बड़ी मात्रा खो जाती है (आधा से अधिक रास्ता)। सबसे पहले, मैंने सोचा कि इसका हमारे बैकएंड, या नेटवर्क के साथ कुछ करना है, लेकिन फ़ाइल लॉगिंग का एक टन जोड़ने के बाद, यह पता चला है कि इन कार्यों के लिए सेवा में रुनटास्क कभी ट्रिगर नहीं किया जाता है (लेकिन वे निश्चित रूप से निर्धारित हो रहे हैं। ?, फिर
GcmNetworkManager.getInstance(context).schedule(new OneoffTask.Builder()
.setService(AvroLogService.class)
.setExtras(bundle)
// A mandatory tag which identifies the task
// We add a unique hash to the tag to make sure that
// tasks are logged and not thrown away as dupes.
// See: http://stackoverflow.com/q/34528960/304262
.setTag(java.util.UUID.randomUUID().toString())
// Persist to disk, even across boots:
.setPersisted(true)
// Sets a time frame for the execution of this task in seconds.
// This specifically means that the task can either be
// executed right now, or at latest at a certain point:
.setExecutionWindow(0, TWO_WEEKS_IN_SECONDS)
.build());
इस काम करता है, लेकिन संदेशों का ही हिस्सा के लिए: इन खो रहे हैं मैं एपीआई गलतफहमी हूँ, या OneoffTasks बस विश्वसनीय नहीं है
यह कैसे OneoffTask शेड्यूल किया गया है है। संदेश जो बाद में खो गए हैं, उपरोक्त कोड निश्चित रूप से निष्पादित किया गया है (मैंने इसे सत्यापित करने के लिए फ़ाइल लॉगिंग जोड़ा है), लेकिन कभी भी correspo नहीं है खोने वाले लोगों के लिए टर्नटास्क चालू हो गया।
मैं सत्यापित किया है कि:
- प्रकट नेटवर्क प्रबंधक लागू करने की मार्गदर्शिका के अनुसार अद्यतन किया जाता है (https://developers.google.com/cloud-messaging/network-manager)
- AvroLogService (मेरी सेवा) फैली हुई है GcmTaskService
- यह onRunTask
- एप्लिकेशन है ओवरराइड करता है RECEIVE_BOOT_COMPLETED अनुमति।
- AvroLogServiceStartCommand पर ओवरराइड नहीं करता है।
मैं खो गया हूं। क्या कोई इस पर अंतर्दृष्टि साझा कर सकता है?
आप अतिरिक्त [अतिरिक्त के लिए यह [गिटहब पोस्ट] (https://github.com/google/gcm/issues/67) देखना चाह सकते हैं 'जीसीएमनेटवर्क प्रबंधक' के उपयोग पर अंतर्दृष्टि और उदाहरण। यदि आपने ऐसा नहीं किया है, तो 'onRunTask()' के अंदर अपने कार्य निष्पादन के लिए तर्क प्रदान करने की आवश्यकता के बारे में पोस्ट में उल्लेख किया गया था और आपको उस राज्य का ट्रैक रखना होगा जिसे आपको उस विशेष कार्य के लिए आवश्यक है आपको क्या चाहिए। – Teyam
मदद करने की कोशिश करने के लिए धन्यवाद, लेकिन उस पोस्ट ने इस मुद्दे के लिए कोई प्रासंगिक अंतर्दृष्टि प्रदान नहीं की है। पोस्ट कार्यों को डेटा पास करने के बारे में पोस्ट वार्ता, और मैं setExtras कार्यक्षमता का उपयोग कर रहा हूं (जो प्रश्न में पोस्ट लिखा गया था, तब मौजूद नहीं था), लेकिन यह इस मुद्दे के लिए वास्तव में प्रासंगिक नहीं है। समस्या यह है कि ऑनरटस्क के अंदर कोड अंतःस्थापित नहीं किया जाता है। अर्थात। इसे कई बार निष्पादित किया जाता है, लेकिन यह कई कतारबद्ध कार्यों को भी खो देता है। ऐसा लगता है कि कार्यों का एक बड़ा प्रतिशत बस खो गया है और कभी भी सफलतापूर्वक कतारबद्ध नहीं होने पर, कभी भी RunTask पर नहीं पहुंचता है। –