2011-06-03 22 views
6

मेरा प्रश्न यह है कि मुझे पता चल सकता है कि पूरा एप्लिकेशन कब रुक गया/फिर से शुरू/बंद हो गया है उदाहरण के लिए यदि मेरे पास मेरे आवेदन में 5 गतिविधियां हैं। जब भी कोई गतिविधि रोका/फिर से शुरू हो जाती है एंड्रॉइड ऑनपॉज़/ऑनर्यूम विधियों को कॉल करके गतिविधि को सूचित करता है।आवेदन रोकें/फिर से शुरू करें राज्य

तो मेरी गतिविधि रोके जाने पर दो संभावित परिदृश्य हैं। 1. मेरी गतिविधि -2 रोक दी गई है क्योंकि मेरी गतिविधि -3 को शामिल किया गया है। 2. मेरी गतिविधि-2 आने वाली कॉल जैसी कुछ बाहरी गतिविधि की वजह से रुक गई है।

यहां मुझे केवल तभी दिलचस्पी है जब मेरी गतिविधि बाहरी गतिविधियों से रोका जाए, न कि मेरी अपनी गतिविधियां।

तो क्या इसके लिए कोई एंड्रॉइड प्रदान किया गया समाधान है या क्या मुझे अपना अनुकूलित समाधान लिखना है।

धन्यवाद Dalvin

उत्तर

10

क्योंकि यह एपीआई द्वारा प्रदान की कोई समाधान नहीं है सकते हैं ज्यादातर मामलों में जरूरत नहीं है।

आप एक सार गतिविधि बनाने और अपनी सभी गतिविधियों को इस सार तत्व से विरासत में लाने के लिए क्या कर सकते हैं। इस अमूर्त गतिविधि में, क्रेट, ऑनरियस, ऑन पॉज़, ऑन डिस्ट्रॉय पर ओवरराइड करके, आप यह जान सकते हैं कि आपकी कितनी गतिविधियां "जीवित" हैं, और फिर अपने आवेदन की स्थिति निर्धारित करें।

यह काम कर सकता था लेकिन यह वास्तव में एंड्रॉयड phylosophy

+2

यदि आपका ऐप कैमरा, या ईमेल जैसे कोई ऐप खोलता है तो यह काम नहीं करेगा। आपको मामले के मामले में ऐसा करना होगा। – SXC

3

आप application.oncreate() पर पूरे आवेदन की शुरुआत पता कर सकते हैं लेकिन वहाँ पूरे आवेदन ठहराव के लिए कोई संकेत है। ज्यादातर मामलों को वैसे भी इसकी आवश्यकता नहीं है।

तो गतिविधि lifecycle और application कक्षा में आगे पढ़ें।

फिर भी आप प्रत्येक वर्ग में onPause अधिभावी द्वारा अपने कार्यक्रम में इस विकल्प को करते हैं और sharedPrefrences के लिए एक मूल्य को बचाने के तो सभी आवेदन पर इस मूल्य पर जांच

3

अगर मैं अपने प्रश्न को समझते हैं, आप अपने ऐप में अपने कार्यक्रम के संदर्भ में या जैसे एक बाहरी घटना वर्तमान गतिविधि बाहर निकलने के बीच भेद करने में सक्षम हो चाहता हूँ नहीं है एक फ़ोन कॉल। मैंने ऐसा करने के लिए अतीत में निम्न विधि का उपयोग किया है (हालांकि यह सबसे अच्छा नहीं हो सकता है, यह निश्चित रूप से काम करता है):

(1) साझा किए गए संदर्भों में एक मान सेट करें (प्रोग्राम के डेटा को संग्रहीत करने के लिए फ़ाइल में निर्मित) । इसे "exitStatus" जैसे कुछ कॉल करें जो प्रोग्राम कोड के भीतर बाहर निकलने के लिए 1 पर सेट है और 0 बाहरी घटनाओं के आधार पर बाहर निकलने के लिए 0 पर सेट है।

(2) अब, अपनी प्रत्येक गतिविधि के भीतर, आउटसोस्टैटस के मान को रीज़्यूम में 0 पर सेट करें (जिसे कोई फर्क नहीं पड़ता कि आप कैसे प्रवेश करते हैं)। यदि आपका प्रोग्राम उस गतिविधि के भीतर किसी बाहरी घटना के कारण निकलता है, तो यह मान तब जारी रहेगा जब प्रोग्राम पुनः लोड हो जाए।

(3) आपकी गतिविधि के अंत में, जहां आप किसी अन्य गतिविधि में स्थानांतरित करने जा रहे हैं, उन सभी बिंदुओं पर, पहले एक्जिटस्टैटस को 1 पर सेट करें। फिर, जब आप दूसरी गतिविधि पर पहुंचते हैं, तो यह पता चलेगा कि आप वहां पहुंचे हैं अपने कार्यक्रम के भीतर से।

(4) इस प्रकार, बस स्पष्ट होने के लिए, आपकी प्रत्येक गतिविधियां शुरुआत में बाहर निकलने की जांच कर सकती हैं यह देखने के लिए कि क्या आप अपने प्रोग्राम संदर्भ (= 1) में प्रवेश कर रहे हैं या किसी प्रकार के गैर-स्थानीय निकास के बाद (= 0)।

यह सब कुछ है। मैं यह सुनिश्चित करने के लिए इस विधि का उपयोग करता हूं कि मेरे ऐप के लिए लोड डेटा मौजूद है क्योंकि यदि कोई उपयोगकर्ता अपना डिवाइस बंद कर देता है तो ऐप खो सकता है ताकि ऐप बाद में रीबूट करने पर चीजों के बीच में उठने का प्रयास कर सके।

0
इसके बजाय आधार गतिविधि बनाने और ओवरराइड onPause/के

onResume आप

registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) 

उपयोग कर सकते हैं जहां एक ही स्थान पर आवेदन गतिविधियों के लिए इन राज्यों संभाल कर सकते हैं।

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