2016-02-19 5 views
5

मैं AndroidApplication क्लास लाइफसाइकिल के बारे में आधिकारिक दस्तावेज ढूंढने की कोशिश कर रहा हूं। जाहिर है, जो मुझे सिस्टम को मेमोरी की आवश्यकता है, उसे स्टैकऑवरफ्लो here और here पर मिली Application कक्षा में मार डाला जा सकता है। यहां तक ​​कि this ट्यूटोरियल ऐसा कहता है।एंड्रॉइड एप्लिकेशन क्लास लाइफसील प्रलेखन

लेकिन कुछ चीजें मुझे थोड़ी परेशान इस बारे में:

  • मैं एक अधिकारी ने मुझे बता कि हाँ, Application वर्ग कम स्मृति पर मारा जा सकता है प्रलेखन नहीं मिल रहा।
  • मुझे Application जीवन चक्र का प्रतिनिधित्व करने वाला कोई आधिकारिक आरेख नहीं मिला है।
  • onLowMemory() को छोड़कर Application कक्षा को मारने पर मुझे उपयोग करने के लिए कोई उचित कॉलबैक नहीं मिल रहा है। क्या इसका मतलब है कि मुझे अपने डेटा को जारी रखने के लिए इस विधि का उपयोग करना होगा?
  • यदि Application कक्षा कम मेमोरी दबाव पर मारे गए हैं और ऐप फिर से अग्रभूमि में आता है, तो मैं अपने onCreate() में कैसे जान सकता हूं कि ऐप को सिस्टम मारने के बाद फिर से बनाया गया है? Activity में मैं savedInstanceState का परीक्षण करूंगा, लेकिन जहां तक ​​मुझे पता है कि Application कक्षा में कुछ भी समान नहीं है।

आपके ज्ञान के लिए धन्यवाद।

+0

'onTrimMemory' के बारे में क्या? – pskink

+0

क्या आपने http://stackoverflow.com/questions/8515936/android-activity-life-cycle-what-are-all-these-methods-for देखा है? –

+0

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle –

उत्तर

4

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

मैं आवेदन का प्रतिनिधित्व करने के लिए किसी भी अधिकारी चित्र नहीं मिल सकता है:

नीचे जहां यह कहा गया है के लिए संदर्भ जीवन चक्र न तो।

:

यह एक उचित अवलोकन है ... हालांकि निम्नलिखित राय-आधारित है, मेरे सबसे अच्छे अनुमान है कि इस तरह के एक चित्र Android के मल्टीटास्किंग "दर्शन" प्रदान की अंतिम संदर्भ में वर्णित के रूप खंडन होता है "एंड्रॉइड इस तरह से अनुप्रयोगों को कैसे संभालता है यह एक कुंजी यह है कि प्रक्रियाएं साफ़ रूप से बंद नहीं होती हैं। जब उपयोगकर्ता कोई एप्लिकेशन छोड़ देता है, तो इसकी प्रक्रिया पृष्ठभूमि में चारों ओर रखी जाती है, जिससे यह काम जारी रखने की अनुमति देती है (उदाहरण के लिए वेब पेज डाउनलोड करना) यदि आवश्यक हो, और अगर उपयोगकर्ता इसे वापस लौटाता है तो तुरंत अग्रभूमि में आएं। यदि कोई डिवाइस स्मृति से बाहर नहीं चलता है, तो एंड्रॉइड इन सभी प्रक्रियाओं को चारों ओर रखेगा, वास्तव में सभी एप्लिकेशन को छोड़ देगा "ru "हर समय nning"।

मैं जब आवेदन वर्ग मार दिया जाता है अपवादित onLowMemory() उपयोग करने के लिए किसी भी उचित कॉलबैक नहीं मिल रहा। क्या इसका मतलब है कि मुझे अपने डेटा को जारी रखने के लिए इस विधि का उपयोग करना होगा?

onLowMemory() के बारे में जिसका वर्णन काफी सरल है, हम एक पृष्ठभूमि प्रक्रिया या अग्रभूमि यूआई के बारे में बात कर रहे हैं? ...

तो आवेदन Activities में से कोई भी अग्रभूमि में चल रही है और ओएस स्मृति कम है, यह मार सकता है ऐप ताकि Application या ऐप घटक (Activity, Service) में से कोई भी कॉलबैक लागू नहीं किया जाएगा। उस ने कहा, (चूंकि आप Activities से निपट रहे हैं) मैं onPause() में, दस्तावेज़ों के अनुसार सभी निरंतर डेटा स्टोर करने की अनुशंसा करता हूं।

आवेदन वर्ग कम स्मृति दबाव पर मार दिया जाता है और एप्लिकेशन को फिर से अग्रभाग में आता है, तो मैं कैसे अपने onCreate() कि एप्लिकेशन एक प्रणाली के बाद से निर्मित किया गया है को मारने में पता कर सकते हैं?

आप इसे Application के onCreate() में पहचान नहीं सकते हैं।

+0

जब इसकी प्रक्रिया बंद होने के बाद अग्रभूमि पर आती है, तो एप्लिकेशन क्लास की 'ऑनक्रेट' विधि लॉन्चर/मुख्य गतिविधि की 'ऑनरेट विधि' से पहले कहलाएगी? –

+1

@ मधुमक्खी बेशक, पहले एक 'एप्लिकेशन' उदाहरण तत्काल है, फिर अन्य ऐप घटक ('क्रियाएँ ',' सेवाएं') बनाए जाते हैं। – Onik

1

जहाँ तक मुझे पता है, आप आवेदन मारे गए ईवेंट को संभाल नहीं सकते हैं। यहां एप्लिकेशन की onTerminate विधि का एक उद्धरण दिया गया है:

यह विधि नकली प्रक्रिया वातावरण में उपयोग के लिए है। यह कभी भी उत्पादन एंड्रॉइड डिवाइस पर नहीं बुलाया जाएगा, जहां प्रक्रियाओं को आसानी से मार कर हटा दी जाती है; कोई उपयोगकर्ता कोड (इस कॉलबैक सहित) ऐसा करने पर निष्पादित किया गया है।

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

आपको कौन सा डेटा स्टोर करने की आवश्यकता है - क्या आखिरी पल के इंतजार के बजाय इसे पहले स्टोर करना (जब यह वेब सेवा से प्राप्त होता है) और इसे स्टोर करना संभव है?

+0

मैं अपने सिंगलेट्स को स्टोर करने के लिए उपयोग करता हूं जिन्हें मेरी सभी गतिविधियों में अपना संदर्भ रखने की आवश्यकता होती है। उनमें से कुछ 'पार्सेलबल' नहीं हैं और इसे परिवर्तित नहीं किया जा सकता है।मुझे पता है कि मैं 'परमाणु 'पर भरोसा नहीं कर सकता लेकिन' आवेदन 'जीवन चक्र –

+0

के बारे में आधिकारिक दस्तावेज की कमी क्या परेशान है यदि आपका आवेदन मारे गए हैं, तो सभी सिंगलेट्स भी जीसीड होंगे। अगली बार जब उन्हें जरूरत पड़ती है तो क्या आप उन्हें फिर से बनाने में सक्षम नहीं हैं? वैकल्पिक रूप से, आप डैगर (http://google.github.io/dagger/) को आजमा सकते हैं और सिंगलटन को इंजेक्ट कर सकते हैं जहां भी आपको उनकी आवश्यकता होती है (आप उन्हें सिंगलेट्स के रूप में चिह्नित कर सकते हैं ताकि डैगर सुनिश्चित कर सके कि एक उदाहरण का उपयोग किया जाता है) । –

+0

हां, मुझे पता है कि वे जीसीड होंगे, मैं क्या जानना चाहता हूं कि यह मामला क्यों है (आधिकारिक स्रोतों से)। और नहीं, मैं उन्हें जीसीड होने के बाद प्राप्त करने में सक्षम नहीं हूं। डैगर का उपयोग अभी तक मेरे लिए एक समाधान नहीं है क्योंकि यह समस्या को दूर करने का मामला है। इसके अलावा मुझे नए आने वाले जैक कंपाइलर और डैगर के साथ कुछ कठिन समय लगेगा। –

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