5

में दिखाई देता है मैं वहाँ है गतिविधियां (ए, बी, सी) मेरी आवेदन करने के भीतर मैं शुरू आवेदन गतिविधि एक:अंक प्रणाली द्वारा मारे गए है या अब आप एंड्रॉयड

A:onCreate() 
    A:onStart() 
    A:onResume() 

आशय मैं हूँ का उपयोग करना दूसरा गतिविधि बुला (ए -> बी):

A:onPause() 
    B:onCreate() 
    B:onStart() 
    B:onResume() 
    A:onStop() 

तो मैं "घर" बटन पर क्लिक करें तो अनुप्रयोग पृष्ठभूमि में चला जाता:

B:onPause() 
    B:onStop() 
अब

1 या 2 घंटे बाद फिर से करने के बाद मैं अपने डिवाइस के भीतर मुख पृष्ठ पर जाने और एप्लिकेशन आइकन ऐसा चलाता क्लिक करें:

B:onDestroy() 
A:onRestart() 
A:onStart() 
A:onResume() 

लेकिन मैं जाने की जरूरत है जो एक गतिविधि मैं इस तरह छोड़ दिया,

B:onRestart() 
B:onStart() 
B:onResume() 

मैं कुछ लेख यह है कि गतिविधि क्योंकि वहाँ नहीं रह गया visible.Is किसी भी संभव की प्रणाली ने मार डाला मेरी समस्या का समाधान करने की तरह कहते हैं पढ़ा है ...

अग्रिम धन्यवाद ...

+0

क्या आप ए और बी गतिविधि का अपना कोड पोस्ट कर सकते हैं? – Dharmendra

उत्तर

6

आप दो अलग बातें यहाँ भ्रमित किया जा सकता है: अगर यह स्मृति की आवश्यकता

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

  2. एंड्रॉयड मानता उपयोगकर्ता समय की एक लंबी अवधि के लिए एक कार्य छोड़ देता है, तो (मुझे लगता है कि इस 30 मिनट की तरह कुछ है) है कि तब वह अब उस कार्य में रुचि रखता है और वहाँ याद करने में कोई मतलब नहीं है, जहां उपयोगकर्ता उस कार्य के गतिविधि ढेर में था क्योंकि वह शायद अब परवाह नहीं करता है। इस मामले में, क्या होता है कि जब उपयोगकर्ता कार्य पर लौटता है (या उस कार्य में गतिविधि स्टैक के शीर्ष पर मौजूद एप्लिकेशन को पुनरारंभ करता है) एंड्रॉइड बस कार्य को रूट गतिविधि पर वापस साफ़ करता है। इसका प्रभाव यह है कि ऐसा लगता है कि एप्लिकेशन फिर से से शुरू हो रहा है। यह वांछित (और दस्तावेज व्यवहार) है।

आप क्या करना चाहते हैं एंड्रॉइड को स्थिति # 2 में कार्य को साफ़ करने से रोकें।आप जड़ गतिविधि (: गतिविधि है कि आपके आवेदन, ACTION_MAIN और CATEGORY_LAUNCHER के साथ एक शुरू होता है यानी) के <activity> टैग करने के लिए

android:alwaysRetainTaskState="true" 

जोड़कर करते हैं।

+0

ओह आपके साफ स्पष्टीकरण डेविड के लिए बहुत बहुत धन्यवाद .... – Srinivasan

1

मुझे विश्वास नहीं है कि यह ऐसा कुछ है जिसे आप निश्चित रूप से नियंत्रित कर सकते हैं। यदि आपकी गतिविधि पृष्ठभूमि में बहुत समय से है और इस बीच अन्य अनुप्रयोगों को स्मृति की आवश्यकता है, तो सिस्टम आपकी गतिविधि को मुफ्त मेमोरी में मार देगा।

+0

हाँ मैं एंडी को जानता हूं लेकिन मेरी ग्राहक आवश्यकता को पुनरारंभ करना चाहिए जिसे मैंने छोड़ दिया ... लेकिन कुछ ऐप इस तरह बनाए रखता है मुझे नहीं पता कि कैसे? – Srinivasan

+1

तब मुझे विश्वास है कि आपको कस्टम कार्यान्वयन करने के बारे में सोचना चाहिए। उदाहरण के लिए हर बार गतिविधि बी खोला जाता है, ऑनक्रेट() में SharePreferences में एक ध्वज लिखें, और ऑनस्ट्रोय() पर उस ध्वज को हटा दें। अब गतिविधि ए शुरू होने पर, उस ध्वज के लिए साझा किए गए संदर्भ देखें। अगर ध्वज सेट किया गया है तो इसका मतलब है कि गतिविधि बी खोला गया था लेकिन सिस्टम ने उसे मार डाला (क्योंकि आईडी को फ्लैग को हटाने के लिए डीस्ट्रोय() पर नहीं पारित किया गया था, इसलिए, उपयोगकर्ता को वहां से गतिविधि बी पर रीडायरेक्ट करें। अगर ध्वज सेट नहीं है, तो कुछ भी नहीं करें। यह एक विचार है ... –

+0

लेकिन यह दूसरी गतिविधि के ऑनक्रेट() से भी जाता है, इसलिए यह किसी भी मान को बनाए रखेगा। – Srinivasan

संबंधित मुद्दे