यह अंततः आपके प्रश्न पर पहुंच जाएगा, लेकिन मैं सबसे पहले आपके विभिन्न मुद्दों पर आपके विभिन्न टिप्पणियों को इस लेख के समय दिए गए विभिन्न उत्तरों को संबोधित करना चाहता हूं। मेरा आपके मन को बदलने का कोई इरादा नहीं है - बल्कि, ये अन्य लोगों के लिए हैं जो भविष्य में इस पोस्ट को पढ़ने के लिए आते हैं।
मुद्दा यह है कि मैं एंड्रॉइड के लिए यह निर्धारित करने की अनुमति नहीं दे सकता कि मेरा ऐप कब समाप्त होने वाला है। यह उपयोगकर्ता की पसंद होना चाहिए।
लाखों लोग उस मॉडल से पूरी तरह से खुश हैं जहाँ पर्यावरण आवश्यकतानुसार आवेदन को बंद कर देता है। वे उपयोगकर्ता केवल एंड्रॉइड ऐप को "समाप्त" करने के बारे में नहीं सोचते हैं, जितना कि वे किसी वेब पेज को "समाप्त" करने या थर्मोस्टैट को "समाप्त" करने के बारे में सोचते हैं।
iPhone उपयोगकर्ता बहुत कुछ उसी तरह से हैं, जिसमें iPhone बटन को दबाने के लिए जरूरी "फील" नहीं होता है, जैसे ऐप को समाप्त कर दिया गया था, क्योंकि कई iPhone ऐप उस जगह को उठाते हैं जहां उपयोगकर्ता ने छोड़ा था, भले ही ऐप वास्तव में बंद हो गया हो (केवल iPhone के बाद से वर्तमान में एक समय में एक तृतीय-पक्ष ऐप की अनुमति देता है)।
जैसा कि मैंने ऊपर कहा था, मेरे ऐप में बहुत सारी चीज़ें चल रही हैं (डेटा को डिवाइस में PUSHed किया जा रहा है, उन कार्यों की सूची जो हमेशा होनी चाहिए, आदि)।
मुझे नहीं पता कि "कार्यों के साथ सूचियाँ जो हमेशा होनी चाहिए" का अर्थ है, लेकिन "डेटा को डिवाइस में रखा जा रहा है" एक सुखद कल्पना है और किसी भी मामले में एक गतिविधि द्वारा नहीं किया जाना चाहिए। AlarmManager
अधिकतम विश्वसनीयता के लिए अपने डेटा को अपडेट करने के लिए एक निर्धारित कार्य (के माध्यम से ) का उपयोग करें ।
हमारे उपयोगकर्ता लॉग इन करते हैं और ऐसा नहीं कर सकते कि हर बार उन्हें फोन कॉल मिले और एंड्रॉइड ऐप को मारने का फैसला करे।
कई iPhone और Android एप्लिकेशन हैं जो इससे निपटते हैं। आमतौर पर, यह इसलिए होता है क्योंकि वे उपयोगकर्ताओं को मैन्युअल रूप से हर समय लॉग इन करने के लिए बाध्य करने के बजाय लॉगऑन क्रेडेंशियल्स पर पकड़ रखते हैं।
उदाहरण के लिए, हम एप्लिकेशन से बाहर निकलते समय अपडेट की जांच करना चाहते हैं
यह किसी भी ऑपरेटिंग सिस्टम पर एक गलती है। आप सभी को पता है कि, आपका आवेदन "बाहर" किया जा रहा है क्योंकि OS बंद हो रहा है, और फिर आपकी अपडेट प्रक्रिया मध्य-धारा में विफल हो जाएगी। आम तौर पर, यह अच्छी बात नहीं है। या तो प्रारंभ पर अपडेट की जांच करें या अपडेट को पूरी तरह से अतुल्यकालिक रूप से जांचें (जैसे, एक निर्धारित कार्य के माध्यम से), कभी भी बाहर निकलने पर।
कुछ टिप्पणियों का सुझाव है कि बैक बटन मारने से ऐप को बिल्कुल भी नहीं मारा जाता है (ऊपर मेरे प्रश्न में लिंक देखें)।
BACK बटन दबाने से "ऐप को मारना नहीं है"। यह उस गतिविधि को पूरा करता है, जब उपयोगकर्ता ने BACK बटन दबाया था।
यह केवल तभी समाप्त होना चाहिए जब उपयोगकर्ता इसे समाप्त करना चाहते हैं - कभी भी किसी अन्य तरीके से नहीं। यदि आप एंड्रॉइड में ऐसा व्यवहार करने वाले एप्लिकेशन नहीं लिख सकते हैं, तो मुझे लगता है कि एंड्रॉइड का उपयोग वास्तविक एप्लिकेशन लिखने के लिए नहीं किया जा सकता है = (और)
फिर न तो वेब अनुप्रयोग कर सकते हैं। या WebOS , अगर मैं उनके मॉडल को सही ढंग से समझता हूं (मुझे अभी तक एक के साथ खेलने का मौका नहीं मिला है)। उन सभी में, उपयोगकर्ता कुछ भी "समाप्त" नहीं करते - वे बस छोड़ देते हैं। iPhone थोड़ा अलग है, इस में यह केवल वर्तमान में एक चीज (कुछ अपवादों के साथ) को चलाने की अनुमति देता है, और इसलिए छोड़ने का कार्य ऐप के काफी तत्काल समापन का तात्पर्य करता है।
क्या मेरे लिए वास्तव में आवेदन छोड़ने का कोई तरीका है?
जैसा कि बाकी सभी ने आपको बताया था, उपयोगकर्ता (BACK के माध्यम से) या आपके कोड (के माध्यम से finish()
) आपकी वर्तमान में चल रही गतिविधि को बंद कर सकते हैं। उपयोगकर्ताओं को आम तौर पर किसी और चीज की आवश्यकता नहीं होती है, ठीक से लिखे गए अनुप्रयोगों के लिए, वेब अनुप्रयोगों का उपयोग करने के लिए उन्हें "छोड़" विकल्प की आवश्यकता होती है।
कोई भी दो अनुप्रयोग वातावरण समान नहीं हैं, परिभाषा के अनुसार। इसका मतलब यह है कि आप वातावरण में रुझान देख सकते हैं क्योंकि नए पैदा होते हैं और अन्य दब जाते हैं।
उदाहरण के लिए, "फ़ाइल" की धारणा को खत्म करने की कोशिश करने के लिए एक बढ़ते आंदोलन है। अधिकांश वेब एप्लिकेशन उपयोगकर्ताओं को फ़ाइलों के बारे में सोचने के लिए मजबूर नहीं करते हैं। iPhone ऐप्स आमतौर पर उपयोगकर्ताओं को फ़ाइलों के बारे में सोचने के लिए मजबूर नहीं करते हैं। एंड्रॉइड ऐप आमतौर पर उपयोगकर्ताओं को फ़ाइलों के बारे में सोचने के लिए मजबूर नहीं करते हैं। और इसी तरह।
इसी तरह, एक ऐप को "समाप्त" करने की धारणा को खत्म करने की कोशिश करने के लिए एक बढ़ते आंदोलन है। अधिकांश वेब एप्लिकेशन उपयोगकर्ता को लॉग आउट करने के लिए बाध्य नहीं करते हैं, बल्कि निष्क्रियता के बाद उपयोगकर्ता को निष्क्रिय कर देते हैं। एंड्रॉइड के साथ एक ही चीज, और कुछ हद तक, iPhone (और संभवतः WebOS)।
इसके लिए एप्लिकेशन डिज़ाइन पर अधिक जोर देने की आवश्यकता होती है, जो व्यवसाय के लक्ष्यों पर ध्यान केंद्रित करता है और कार्यान्वयन मॉडल के साथ चिपकता नहीं है, जो पिछले एप्लिकेशन वातावरण से जुड़ा होता है। जिन डेवलपर्स के पास ऐसा करने के लिए समय या झुकाव की कमी है, वे नए वातावरण से निराश हो जाएंगे जो उनके मौजूदा मानसिक मॉडल को तोड़ते हैं। यह किसी भी पर्यावरण की गलती नहीं है, इससे अधिक किसी भी पहाड़ की गलती है जो इसके माध्यम से बजाय इसके चारों ओर बहने वाले तूफानों के लिए है।
उदाहरण के लिए, हाइपरकार्ड और स्मॉलटाक जैसे कुछ विकास परिवेशों में एक सेटअप में अनुप्रयोग और विकास उपकरण सह-मिला हुआ था। यह कॉन्सेप्ट ऐप्स के भाषा एक्सटेंशन के बाहर (जैसे, एक्सेल में VBA , ऑटोकैड में लिस्प ) को ज्यादा नहीं झेल पाया । डेवलपर्स जो मानसिक मॉडल के साथ आए थे, जिन्होंने ऐप में ही विकास साधनों के अस्तित्व को माना था, इसलिए, या तो अपने मॉडल को बदलना होगा या खुद को ऐसे वातावरण तक सीमित करना होगा जहां उनका मॉडल सही होगा।
इसलिए, जब आप लिखते हैं:
मेरे द्वारा खोजी गई अन्य गन्दी चीजों के साथ, मुझे लगता है कि एंड्रॉइड के लिए हमारे ऐप को विकसित करने से कुछ होने वाला नहीं है।
यह सबसे अच्छा है, आप के लिए, अभी के लिए प्रतीत होता है। इसी तरह, मैं आपको आपके एप्लिकेशन को वेब पर पोर्ट करने के प्रयास के खिलाफ परामर्श दूंगा, क्योंकि कुछ ऐसी ही समस्याओं के बारे में, जो आपने एंड्रॉइड के साथ रिपोर्ट की हैं, आप वेब एप्लिकेशन में भी पाएंगे (उदाहरण के लिए, कोई "समाप्ति")। या, इसके विपरीत, किसी दिन अगर आप ऐसा वेब के लिए अपने app बंदरगाह, आप पा सकते हैं कि वेब अनुप्रयोग का प्रवाह Android के लिए एक बेहतर मैच हो सकता है, और आप उस समय एक Android बंदरगाह पर फिर से कर सकते हैं।