android startForeground() कॉर्डोवा के साथ समस्याओं का कारण बनता है




cordova service (2)

मैं अपने startForeground ऐप में एक सेवा का उपयोग कर रहा हूं जो startForeground में एक startForeground अधिसूचना उत्पन्न करता है। यदि ऐप स्वाइप के माध्यम से मारा जाता है और फिर से शुरू किया जाता है, तो कॉर्डोवा डिवाइस-तैयार ईवेंट अब और नहीं निकाल दिया जाता है। ऐसा लगता है कि जब ऐप पुनरारंभ होता है तो cordova ऑब्जेक्ट स्वयं परिभाषित नहीं होता है। मुझे निम्न त्रुटि संदेश मिलता है:

E/Web Console(19472): Uncaught TypeError: Object #<Object> has no method 'exec' at file:///android_asset/www/src/jsFile.js:31

रेखा 31 और निम्नलिखित:

cordova.exec(function (r) {
            if (callback) {
                callback(r);
            }
        }, function (err) {
            if (callback) {
                callback(false);
            }
        }, "Plugin", "functionName", []); 

समस्या केवल तब होती है जब मैं अपनी सेवा में startForeground उपयोग करता startForeground , अगर मैं कोड के इस भाग पर टिप्पणी करता हूं तो यह सब ठीक से काम कर रहा है। मुझे इन सवालों पर कुछ मदद की जरुरत है:

  • क्या कॉर्डोवा मैन्युअल रूप से चलाना संभव है?
  • startForeground साथ सेवा कैसे शुरू करें, लेकिन ऐप को मारने और पुनरारंभ करने के बाद भी startForeground डिवाइस तैयार करें

संपादित करें:

दो त्वरित उदाहरण परियोजनाओं के बाद, कॉर्डोवा 3.6 (संस्करण जो मैं अपने वास्तविक ऐप के लिए उपयोग कर रहा हूं) और कॉर्डोवा 5.1 के साथ, मुझे एहसास हुआ कि नई कॉर्डोवा संस्करण में समस्या नहीं होती है। हालांकि मैं वास्तव में अद्यतन नहीं करना चाहता, क्योंकि:

  • किसी चल रहे सिस्टम को कभी स्पर्श न करें
  • मुझे नहीं पता कि कभी भी संस्करण में क्या काम नहीं कर सकता है, क्योंकि मैंने अपने ऐप में कई प्लगइन स्थापित किए हैं।
  • मैं आलसी हूँ।

कोई विचार क्या 3.6 से 5.1 में बदल सकता है जो बग हल करता है, और क्या मैं तदनुसार अपना 3.6 कोड अपडेट कर सकता हूं?

EDIT2:

यह इस प्रश्न का डुप्लिकेट नहीं है। इस सवाल में डिवाइस रीडी कॉलबैक गलत तरीके से पारित किया गया था। यह मेरे ऐप में मामला नहीं है, और जब मैं अपनी सेवा में startForeground का उपयोग नहीं करता हूं तो यह केवल तभी काम नहीं startForeground

https://code.i-harness.com


ऐसा लगता है कि आपके ऐप्स के जीवन चक्र के आस-पास कोई समस्या है। जब आप ऐप को स्वाइप या मजबूती से बंद करते हैं, तो ऐप प्रोसेस मारे जाते हैं, इसलिए जब आप स्टेटस बंडल में निर्भर ऑब्जेक्ट्स या वेरिएबल्स को सेव नहीं करते हैं तो पुनरारंभ करते समय वे वापस आ जाएंगे क्योंकि गतिविधि मान रही है कि ये चीज़ें उपलब्ध हैं। क्या आप onCreate() में आपके पास मौजूद कोड को पेस्ट कर सकते हैं, यह अनुमान लगा रहा है कि आपका परिभाषित कॉर्डोवा कहां है।


जब जेएस onDeviceReady() ईवेंट कॉलबैक के भीतर नहीं लिखा जाता है - या कॉर्डोवा WebView को फिर से लोड किया जा रहा है, जब Device पहले से ही "तैयार" स्थिति में है - इस मामले में केवल onDocumentReady() ईवेंट एक और बार ट्रिगर किया जाएगा।

एक परीक्षण केस स्थापित करने का प्रयास करें जो लॉग करता है जब कौन सा ईवेंट ट्रिगर किया जा रहा है; Device और Document तैयार के बीच का अंतर अपराधी हो सकता है। जेएस घटनाओं और लॉगकैट के वर्बोज़ लॉगिंग का सुझाव दिया।

स्थिति को रोकने के लिए, जेएस घटनाओं को अलग-अलग बाध्य करने या उनके बीच कोड को स्थानांतरित करने की आवश्यकता हो सकती है, जो ऐसा लगता है: Device "तैयार" होने पर WebView को फिर से लोड करने के लिए, संभवतः कुछ प्रकार के कार्यान्वयन प्रयास, जो काम करता है WebView कार्यान्वयन के भीतर एक जेएस ऐप चलाने की अवधारणा के खिलाफ? कम से कम कोड देखने के बिना (यह स्पष्ट रूप से यह "उदाहरण" काम नहीं करेगा, जबकि टूटी संदर्भ हैं), मुझे लगता है कि Service पहले से चल रही है, जबकि ऐप इसे शुरू नहीं कर सकता है।

यह आपके द्वारा संग्रहित करने का प्रयास करने का एक कार्यात्मक example हो सकता है।

जबकि कॉर्डोवा का वर्तमान संस्करण 5.1 से 7.0 है।





hybrid-mobile-app