ऐप आइकन कॉल से होम बटन दबाकर ऐप एक्सेस फिर से करें?

मेरे पास ऑफ़लाइन-ऑनलाइन एप्लिकेशन है, मुझे इसमें एक अजीब समस्या मिली, हो सकता है कि यह नहीं हो, लेकिन मुझे इसके बारे में समझ में नहीं आया ..
ऐप आवश्यकता यह है कि, अगर इंटरनेट उपलब्ध है, ऐप शुरू करने या फिर से शुरू करने से भी, मैं वेबक्वाइसेस को कॉल करता हूं और एसक्लाइट में डेटा स्टोर करता हूं, अन्यथा ऐप ऑफ़लाइन मोड में रहता है,
मेरे पास 2 गतिविधियां हैं, दूसरी गतिविधि में एक आईडी है, जिसे मैं इरादे से गुजरता हूं (वह बिंदु महत्वपूर्ण है),
मेरी समस्या:
अगर मैं दूसरी गतिविधि में हूं, और इंटरनेट चल रहा है, और मैं होम बटन दबाता हूं, तो यह दूसरी गतिविधि रुक ​​जाती है, फिर एंड्रॉइड में एक डिफ़ॉल्ट व्यवहार बंद करें, मुझे सेटिंग्स मिल गई हैं, वाईफाई बंद करें, फिर ऐप आइकन फिर से मेरे ऐप में वापस आने के लिए, मैं उलझन में आया, मुझे उम्मीद है कि मेरा ऐप अब onResume में होगा, लेकिन जब मैं logcat में देखता हूं तो इसकी onrereated और ऐप क्रैश, nullPointerException होता है, क्योंकि इस दूसरी गतिविधि में वह आईडी नहीं है, मैं इरादे से गुजरता हूं ..

Note:
If i use recent app button to go to "settings", then come back again after turing wifi off, and repeat all this behavior, then working fine, its onResumes called not oncreate..

My Question
Why it is going in onCreate while i my expectation is to be onResume while i came back from app icon?

5

4 उत्तर

एनपीई कारण स्पष्ट है, आपकी दूसरी गतिविधि में मूल्य नहीं है और यह दुर्घटनाग्रस्त हो जाता है।

Why do you get different behavior then!?

ऐसा इसलिए है क्योंकि लॉन्चिंग इराद अलग हैं। जब आप "टास्क स्विच" एंड्रॉइड केवल अपने ऐप को रोक रहे हैं, लेकिन अगर आप वापस स्विच करना चाहते हैं तो उसे वहां छोड़ दें ( कोई गारंटी नहीं )।

घर जाकर (घर के साथ) एक स्पष्ट संकेत है कि आप ऐप छोड़ना चाहते हैं, और हालांकि यह स्मृति और कैश में रहेगा (जब तक कि उपलब्ध स्मृति उपलब्ध हो), लॉन्चर के माध्यम से वापस जा रहा है (या ऐप आइकन जिसे आप इसे कहते हैं ) लॉन्चर श्रेणी को आग लगती है (जो आपकी गतिविधि 1 में पहली बार जाती है)।

परिणामों को बेहतर ढंग से समझने के लिए यह StackOverflow प्रश्न (और उत्तर) पर एक नज़र डालें।

किसी भी मामले में, आपकी समस्या यह है कि आपका ऐप हमेशा एक असंगत स्थिति में फिर से शुरू करने के लिए डिज़ाइन किया जाना चाहिए और पुनर्प्राप्त करने में सक्षम होना चाहिए । एंड्रॉइड होगा अपने संदर्भों को मार दें, आपके चरों को नष्ट कर देगा और संभवतया आपके ऐप को नरक रात भर भेज दें, भले ही आप इसे चला रहे हों ... अगर फ़ोन स्टैंडबाय पर चला जाता है, संभावनाएं ऐसी प्रक्रियाएं होती हैं जो कुछ भी नहीं कर रही हैं रोका/बंद कर दिया जाएगा और संभवतः मारे जा सकते हैं।

अपने ऐप को दोबारा डिज़ाइन करें ताकि यह कोई समस्या न हो।

तुम कहो:

"मेरे पास 2 गतिविधियां हैं, दूसरी गतिविधि में एक आईडी है, जिसे मैं पास करता हूं   इरादे के माध्यम से (वह बिंदु महत्वपूर्ण है), "

खैर, इसे आसान क्यों न बनाएं और एक गतिविधि और दो टुकड़े क्यों करें? फिर मान पास करने के लिए फ्रैगमेंट तर्क का उपयोग करें?

या वरीयताओं और/या स्थानीय डेटाबेस में मान क्यों संग्रहीत नहीं करते हैं और इसे क्रिएट के दौरान पुनर्प्राप्त करते हैं?

और यह भी क्यों नहीं बनाते कि अगर गतिविधि 2 के पास कोई मूल्य नहीं है, तो यह गतिविधि 1 को कॉल करता है और खुद को बंद कर देता है (एक दुर्घटना से बेहतर, हुह?)।

आदि।

जैसा कि आप देख सकते हैं कि कई चीजें हैं जिन पर आपको विचार करना चाहिए। सब कुछ, कभी नहीं भरोसा है कि आपका ऐप जीवित रहेगा, क्योंकि यह नहीं होगा।

2
जोड़ा
वाह .. बहुत अच्छा जवाब और महान समाधान, अब मैं समझता हूं, और मेरी आईडी को सहेजने और पुनर्स्थापित करने के लिए सहेजे गए इंस्टेंसस्टेट का उपयोग करता हूं। इस विस्तार को देखने के लिए खुश, कई thanx :)
जोड़ा लेखक Irfan Ahmed, स्रोत
यह देखने में खुशी हुई। SavedInstanceState का उपयोग करने से सावधान रहें। उस बंडल का उद्देश्य केवल अस्थायी रूप से किसी गतिविधि या टुकड़े के जीवन चक्र के दौरान राज्य को बचाने और स्थायी भंडारण समाधान के रूप में नहीं किया जाना है। कृपया एक विचार प्राप्त करने के लिए इस स्टैक ओवरफ़्लो थ्रेड को पढ़ें: stackoverflow में। कॉम/प्रश्न/151777/& hellip; आप मार्टिन बेलचर - ईगो द्वारा लिखे गए अंत के पास एक बहुत अच्छी व्याख्या देख सकते हैं
जोड़ा लेखक Martin Marconcini, स्रोत

आपने कहा है कि यदि आप सेटिंग्स पर जाते हैं तो आप देख सकते हैं कि सक्रियता बंद हो गई है (ऑनस्टॉप)। यह एंड्रॉइड गतिविधि जीवन चक्र में दिखाया गया व्यवहार है। ऑनस्टॉप के लिए समकक्ष क्रेट पर है। तो यह करता है कि दस्तावेज हमें क्या बताता है। बीटीडब्ल्यू गतिविधियों को रोका जाता है अगर वे किसी भी तरह से दिखाई दे रहे हैं और अगर वे अब दिखाई नहीं दे रहे हैं तो बंद हो जाएं। यह समझाएगा कि आपकी गतिविधि क्यों रुक गई है। अधिक जानकारी के लिए गतिविधि लाइफसाइक्ल प्रबंधित करना पढ़ें। आप जीवन चक्र यहां की पूरी तस्वीर पा सकते हैं।

1
जोड़ा
वर्णित व्यवहार के लिए @ मार्टिनमार्ककोनीनी (ऐप प्रक्रिया मारे जाती है) समकक्ष onCreate() विधि है। अन्यथा यदि गतिविधि केवल बंद हो जाती है तो आप सही हैं। जीवन चक्र चित्र पर एक नज़र डालें, बाईं ओर और दाईं ओर एक रास्ता है। ;)
जोड़ा लेखक Baschi, स्रोत
प्रतीक्षा करें, मैंने यह भी कहा है कि, यदि मैं डिवाइस से हालिया ऐप बटन का उपयोग करके ऐप्स के बीच स्विच करता हूं, तो इसके बाद भी इसे रोक दिया जाता है, जिसे कॉल किया जाता है, और जब मैं उसी हालिया ऐप बटन से वापस स्विच करता हूं, इस बार मेरा ऑनर्यूम कहा जाता है .. यह होना चाहिए अपने उत्तर के मामले में तैयार करें? है ना?
जोड़ा लेखक Irfan Ahmed, स्रोत
onStop() का समकक्ष ऑनस्टार्ट() नहीं onCreate() है।
जोड़ा लेखक Martin Marconcini, स्रोत
@ बास्ची अच्छी तरह से आप सही हैं कि यह किसी भी तरह से जा सकता है, लेकिन केवल तभी नष्ट हो जाता है (जो हो रहा है और अंत में होगा)।
जोड़ा लेखक Martin Marconcini, स्रोत

जब आप फ़ॉन्ट प्रकार, फ़ॉन्ट आकार या भाषा जैसे कुछ सिस्टम कॉन्फ़िगरेशन बदलते हैं तो इस प्रकार का व्यवहार देखा जा सकता है। लेकिन वाईफाई चालू/बंद करने से ऐप को नष्ट नहीं किया जाएगा और इसे फिर से बनाया जाएगा। http://developer.android.com/guide/topics/ देखें अधिक जानकारी के लिए प्रकट/गतिविधि-element.html # config

1
जोड़ा

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

1
जोड़ा