कारण है कि पारित इरादे onStartCommand में पूर्ण हो जाएगा


100

क्या कोई अन्य कारण है कि जिस इरादे को पारित किया गया है, onStartCommand(Intent, int, int)वह इस तरह के झंडे के माध्यम से सेवा को फिर से शुरू करने के अलावा NULL होगा START_STICKY?

साथ ही, जब सिस्टम द्वारा सेवा को फिर से शुरू किया जाता है, तो Intent.getAction()विधि NULL ... कभी-कभी लौटती है। आशय केवल NULL नहीं हैgetAction()

मैंने यहाँ भी पूछा, लेकिन अभी तक जवाब नहीं मिला है।

अद्यतन : मार्क मर्फी के साथ चैट करने के बाद, उन्होंने सुझाव दिया कि मैं वापसी START_REDELIVER_INTENTमें onStartCommand()कॉलबैक मेरी सेवा में के बजाय START_STICKYइतना है कि पूरे आशय पुन: प्रारंभ करने निम्नलिखित भेजा जाता है।

मैंने शुरू में ऐसा नहीं किया क्योंकि मुझे चिंता थी कि यदि सेवा कुछ करने का प्रयास कर रही है, तो उस बीच में कुछ सेवा को फिर से शुरू किया गया ... क्या यह पहचाना जाएगा कि उसने कुछ करना शुरू कर दिया है? मुझे लगता है कि तर्क है मुझे इसके लिए जिम्मेदार होने की आवश्यकता होगी :)


16
अपने प्रश्न को उत्तर के साथ संपादित करने के बजाय, एक उत्तर जोड़ें और इसे स्वीकार करें ताकि आपका प्रश्न अनुत्तरित प्रश्नों के सेट में दिखना बंद हो जाए - धन्यवाद।
डेल विल्सन

2
समान समस्या वाले किसी व्यक्ति के लिए बस एक नोट। मैंने पाया है कि आम तौर पर जब मैं त्रुटि है कि प्राप्त intentहै nullपर onStartCommand(), यह कुछ अन्य त्रुटि जो LogCat में दिख रहा है इस से पहले के कारण होता है। मुझे पता नहीं क्यों, लेकिन यह वही है जो मैंने देखा है और इसे अनदेखा करना काफी आसान है।
पायोत्र चोजनेकी

2
@DaleWilson मैं चाहता हूँ, लेकिन यह सवाल वास्तव में हल नहीं हुआ है। जब तक मुझे इस बात का पक्का जवाब नहीं मिल जाता है कि एक इरादे क्यों अशक्त हैं या कैसे बिना START_REDELIVER_INTENT (जो मुझे बाद में पता चला है, का उपयोग किए बिना एक नीच इरादे से बचना है, तो मुझे वह नहीं चाहिए जो अभी भी मेरी समस्याओं को हल करेगा लेकिन इस प्रकार मैंने अपना संपादन छोड़ दिया) मैं एक उत्तर स्वीकार नहीं कर सकता।
rf43

@Mosquito क्या आपने देखा कि विशेष रूप से, क्या एक त्रुटि फेंक रही थी?
rf43

1
@DDoSAttack वास्तव में मायने नहीं रखता। मेरे मामले में यह NullPointerExceptionएक गतिविधि में कहीं उदाहरण के लिए था । बाद में यह कुछ और त्रुटि थी। लेकिन दोनों मामलों में मेरे स्टैक ट्रेस से पता चला कि मेरी सेवा - जो इस त्रुटि के दौरान चल रही थी - जो आपके मामले में वैसी ही intentथी null। मैं काफी समय से सोच रहा था कि क्या गलत है, जब मैंने स्टैक ट्रेस को स्क्रॉल करने का फैसला किया और यह दिखाई दिया कि कहीं न कहीं शीर्ष पर मेरी असली त्रुटि थी। इस एक को हल करने के बाद, वह भी null intentगायब हो गया।
पायोत्र चोजनेकी

जवाबों:


50

मुझे आश्चर्य है कि आने वाले झंडे की कोई चर्चा नहीं है। मैं निम्नलिखित के साथ लॉग में इस पर नजर रखने जा रहा हूँ:

if (null == intent || null == intent.getAction ()) {
        String source = null == intent ? "intent" : "action";
        Log.e (TAG, source + " was null, flags=" + flags + " bits=" + Integer.toBinaryString (flags));
        return START_STICKY;
}

अपडेट: झंडे 0 थे इसलिए वहां कुछ भी कार्रवाई योग्य नहीं था। मैं समारोह की कोई हानि के साथ वहाँ में अशक्त जाँच छोड़ दिया है।

संपादित करें: ठीक है, मैंने इसे सभी स्थानों के START_STICK के प्रलेखन में पाया! "यदि कोई लंबित स्टार्ट कमांड सेवा में वितरित करने के लिए नहीं हैं, तो इसे एक अशक्त इरादे वाली वस्तु के साथ कहा जाएगा, इसलिए आपको इसके लिए जांच करने का ध्यान रखना चाहिए।"

http://developer.android.com/reference/android/app/Service.html


6
कोटलिन में, इरादे को शून्य के रूप में चिह्नित किया गया है, और यह ऐप को क्रैश कर देता हैoverride fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
मुहम्मद नादेरी

@MuhammadNaderi आप बस इरादा कर सकते हैं Intent?। मेरे लिए काम किया। लेकिन फिर निश्चित रूप से आपको अशक्त इरादे को सही ढंग से संभालने की आवश्यकता है।
पैट्रिक बूस

@PatrickBoos But then of course you need to correctly handle null intent; तुम क्या मतलब है?! कैसे? धन्यवाद।
डॉ.जैक्य

मेरा मतलब सिर्फ onStartCommand(intent: Intent?, ...)यह था कि आपके कोड में काम करना चाहिए। और फिर बस मत करो, intent!!लेकिन अगर इरादे अशक्त हैं तो सही ढंग से जांच करें।
पैट्रिक बूस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.