मेरे पास एक ऐसी गतिविधि है जिसे स्क्रीन शुरू होने पर स्क्रीन चालू करने की आवश्यकता होती है (बस स्क्रीन बंद होने पर)। तो मेरी onCreate
में, मेरे पास है:मेरी गतिविधि लॉन्च होने के बाद ऑनस्ट को सही क्यों कहा जा रहा है?
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
|WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
|WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
इस सरल संयोजन का उपयोग करना, मैं प्रदर्शित करने के लिए जब भी यह मेरी पृष्ठभूमि सेवा प्रारंभ हुआ है मेरे गतिविधि का कारण करने में सक्षम हूँ (हाँ, यह एक वैध मामला है)।
समस्या यह है कि, जब मैं इस तरह की स्थिति में अपनी गतिविधि शुरू करता हूं तो समस्या बहुत ही अजीब जीवन चक्र व्यवहार होती है। व्यापक लॉगिंग का उपयोग करना, मैं यह पता लगाने की है कि निम्नलिखित 7 चरणों की प्रक्रिया होता तुरंत में सक्षम के बाद गतिविधि शुरू कर रहा है था:
- onCreate
- onStart
- onResume
- onPause
- onStop
- ऑनस्टार्ट
- ऑनर्यूम
इसे देखें? एक साधारण गतिविधि शुरू करने के लिए, स्टार्ट को दो बार बुलाया जाता है। और सबसे महत्वपूर्ण बात यह है कि ऑनस्ट को रहस्यमय तरीके से बुलाया जाता है, भले ही गतिविधि अभी शुरू हुई थी - और कुछ भी नहीं हुआ जिससे यह रुक जाएगा।
मैंने कई अलग-अलग परिदृश्यों में इसका परीक्षण किया है और ऐसा लगता है कि यह अजीब व्यवहार तब होता है जब स्क्रीन बंद होती है और इसे नष्ट होने के बाद गतिविधि लॉन्च की जाती है। यदि स्क्रीन चालू है, या यदि गतिविधि रोक दी गई थी [लेकिन अभी तक नष्ट नहीं हुई] गतिविधि सामान्य रूप से लॉन्च होती है, और ऑनस्टार्ट को केवल एक बार बुलाया जाता है।
निष्कर्ष: ऐसा लगता है कि जब मेरी गतिविधि शुरू की है और स्क्रीन पर मजबूर किया जाता है, एंड्रॉयड, गतिविधि शुरू होता है तो यह बंद हो जाता है, और फिर किसी स्पष्ट कारण के लिए इसे फिर से शुरू होता है।
तो: यह क्यों हो रहा है? और क्या ऐसा कुछ भी है जो मैं इसे हल करने के लिए कर सकता हूं (ताकि जब तक कोई वैध कारण न हो तब तक स्टॉप को तब तक नहीं बुलाया जाता है)?
नोट्स:
- प्रश्न में गतिविधि
singleTask
launchmode - मैं कीगार्ड/लॉक अक्षम करने की कोशिश की है उपयोग कर रहा है, लेकिन यह कोई प्रभाव नहीं
- मैं एक पर इस व्यवहार साक्षी रहा है सैमसंग गैलेक्सी टैब 10.1 एंड्रॉइड 3.2 चल रहा है। मैं परीक्षण नहीं किया यह कुछ और करने के लिए लागू होता है कि क्या ...
गतिविधि के घूर्णन की आवश्यकता होने पर मुझे एक समान व्यवहार होता है। मेरे मामले में गतिविधि AndroidManifest में एक अनिर्दिष्ट अभिविन्यास है। क्रिएट के दौरान मैंने अपनी राज्य मशीन के आधार पर अभिविन्यास सेट किया। जब मैंने जो अभिविन्यास सेट किया है वह वर्तमान नहीं है जिसका अर्थ है कि गतिविधि को घुमाने की जरूरत है, तो मैंने आपके द्वारा वर्णित अजीब जीवन-चक्र को देखा है। क्या आपको जवाब मिल गया? – kingston
मैंने यह भी जांच लिया है कि ऑनस्टॉज़ से पहले पोस्टस्टेसम को कॉल किया जाता है। – kingston
यहां वर्णित समाधान मेरे लिए काम करता है: [ऑनपोज़ और ऑनस्टॉप() गतिविधि शुरू करने के तुरंत बाद बुलाया जाता है] (http://stackoverflow.com/questions/25369909/onpause-and-onstop-called-immediately-after-starting-activity) – cyberhuman