जब आप हाल ही में ऐप्स सूची से किसी ऐप को स्वाइप करते हैं तो वास्तव में क्या होता है?


147

आइसक्रीम सैंडविच में हाल के ऐप्स की सूची में ऐप को सूची से बाहर स्वाइप करने की क्षमता जोड़ी गई, जिससे उन्हें स्थायी रूप से खारिज कर दिया गया (और जहां तक ​​मुझे पता है कि यह एक वेनिला फ़ंक्शन है, सीएम / कस्टम रोम एक नहीं है)। इस कार्यक्षमता के अंडर-द-हूड कामकाज को कवर करने के लिए प्रलेखन और प्लेटफ़ॉर्म हाइलाइट्स दिखाई नहीं देते हैं, लेकिन मुझे यह जानने के लिए उत्सुक हैं कि सिस्टम वास्तव में क्या कर रहा है।

अपनी जिज्ञासा को और बढ़ाते हुए, मैंने एक त्वरित परीक्षण करने का निर्णय लिया: मैंने एक CM9 इंस्टाल पर म्यूजिक शुरू किया, फिर उसमें से बैकअप लिया। मैंने तब हालिया ऐप्स सूची की जाँच की और देखा कि यह वास्तव में वहां था (और उचित स्थिति में, थंबनेल के आधार पर)। मैं तब चला गया Settings->Applicationsऔर बल ने म्यूजिक ऐप को बंद कर दिया, लेकिन इसे अभी भी हालिया सूची में सूचीबद्ध किया गया था, जिससे मुझे विश्वास हो गया कि यह पृष्ठभूमि में सुस्त प्रक्रियाओं से जुड़ा नहीं है।

अब यह महसूस करते हुए कि संगीत एक खराब विकल्प हो सकता है, मैंने यूएसए टुडे ऐप के साथ भी परीक्षण किया। यह मूल रूप से एक ही व्यवहार प्रदर्शित करता है, और ऐसा लगता है कि बल स्टॉप (जो समझ में आता है) के बाद "relaunch" करने के लिए मजबूर किया गया था, हालांकि हाल ही में ऐप्स सूची में थंबनेल यह प्रतिबिंबित नहीं किया गया था (कैश्ड, मैं अनुमान लगा रहा हूं?)।

इसलिए, जब आप हाल ही में सूची से ऐप हटाते हैं, तो वास्तव में ओएस स्तर पर क्या होता है? क्या यह केवल रैम और कचरा से ऐप के डेटा को साफ करता है, जो इसे सहेजे गए राज्य को नष्ट करता है?

जवाबों:


68

हाल की ऐप्स सूची में से ऐप्स स्वाइप करना वैनिला है, और हां, अच्छी तरह से प्रलेखित नहीं है। यह विभिन्न एंड्रॉइड मंचों पर चर्चा का एक सभ्य राशि का विषय रहा है ... सर्वसम्मति से यहां कुछ टिप्पणियों में सबसे अच्छा वर्णन किया गया लगता है : यह व्यवहार समान है, लेकिन ऐप को बंद करने के समान नहीं है - सामान्य तौर पर ( उन ऐप्स के लिए जो स्पष्ट बैक बटन हैंडलिंग को परिभाषित नहीं करते हैं) यह एक आवेदन के भीतर से पर्याप्त समय तक वापस मारने के समान है जो आप इससे बाहर निकलते हैं।

लिंक में बारीकियों पर कुछ और विवरण हैं, लेकिन कुल मिलाकर आप इसे आवेदन छोड़ने के बारे में सोच सकते हैं।

संगीत ऐप के लिए विशिष्ट, मेरा मानना ​​है कि यह एक सेवा शुरू करता है, इसलिए जब कार्य स्वयं (संगीत ऐप / UI) बंद हो सकता है, तो सेवा पृष्ठभूमि में चलती रहती है ताकि आपका संगीत केवल इसलिए नहीं रुके क्योंकि कार्य स्मृति प्रबंधन कारणों से साफ हो गया। आपने जो देखा, वह प्रभावित हो सकता है।


1
धन्यवाद, उस लिंक पर बहुत अच्छी चर्चा है। आप भी सही हो सकते हैं: संगीत, जो एक खराब परीक्षा हो सकती है। मैं एक और ऐप की कोशिश करूंगा, सिर्फ किक के लिए।
एल्डारैथिस

2
आगे जाने और इसे स्वीकार करने के बाद से reddit चर्चा ने मुझे कुछ बेहतर खोज शब्द ढूंढने में मदद की, और डायने हैकॉर्न द्वारा कुछ पोस्टों द्वारा पुष्टि की गई, जो मैंने अपने उत्तर में नोट किया था । धन्यवाद!
एल्डररैथिस


1
पूर्ण धन्यवाद! मेरे लिए इस पोस्ट ने मेरी मदद की: reddit.com/r/Android/comments/mpevh/…
Boris Strandjev

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

78

मुझे जादुई खोज शब्द मिले हैं जो Google कर्मचारियों के कुछ स्पष्टीकरणों का कारण बने। विशेष रूप से, मुझे अलग-अलग स्थानों के एक जोड़े के बारे में पता चला, जहां डायने हैकॉर्न बताते हैं कि जब आप हाल की सूची से बाहर निकलते हैं, तो क्या होता है। पहली उसकी एक Google+ पोस्ट पर एक टिप्पणी है :

[डब्ल्यू] टोपी विशेष रूप से तब होती है जब आप एक हालिया कार्य को स्वाइप करते हैं, यह है: (१) अनुप्रयोग की किसी भी पृष्ठभूमि या रिक्त प्रक्रियाओं को मारता है (देखें http://developer.android.com/guide/topics/fundamentals/processes-and- threads.html # Lifecycle इसका क्या अर्थ है), और (2) कोई भी बताने के लिए नया http://developer.android.com/reference/android/app/Service.html#onTaskRemoved(android.content.Intent/ API का उपयोग करता है निकाले जा रहे कार्य के बारे में आवेदन की सेवाएं इसलिए इसे जो भी उचित लगता है वह कर सकता है।

वह एक ब्लॉग टिप्पणी में भी नोट करती है :

दरअसल, हाल के कार्यों में एक प्रविष्टि को हटाने से प्रक्रिया के लिए मौजूद किसी भी पृष्ठभूमि प्रक्रिया को मार दिया जाएगा। यह सीधे तौर पर सेवाओं को रोकने का कारण नहीं बनेगा, हालांकि यह पता लगाने के लिए कि कार्य बंद करने का निर्णय लिया गया है, यदि वे चाहते हैं कि यह बंद हो जाए, तो उनके लिए एक एपीआई है। ऐसा इसलिए है क्योंकि ई-मेल ऐप के हालिया कार्य को हटाने से ई-मेल के लिए जाँच बंद नहीं होगी।

यदि आप वास्तव में किसी ऐप को पूरी तरह से बंद करना चाहते हैं, तो आप ऐप की जानकारी पर जाने के लिए हाल के कार्यों पर लंबे समय तक प्रेस कर सकते हैं, और हिट बल को रोक सकते हैं। स्टॉप के लिए ऐप की पूरी तरह से हत्या है - सभी प्रक्रियाओं को मार दिया जाता है, सभी सेवाओं को रोक दिया जाता है, सभी सूचनाएं हटा दी जाती हैं, सभी अलार्म हटा दिए जाते हैं, ऐप को स्पष्ट रूप से अनुरोध किए जाने तक फिर से लॉन्च करने की अनुमति नहीं है।

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


यह निश्चित रूप से गैर-स्पष्ट व्यवहार है, बहुत दिलचस्प है!
मैथ्यू

"प्रक्रिया के लिए मौजूद किसी भी पृष्ठभूमि प्रक्रियाओं को मार डालो। यह सीधे सेवाओं को रोकने का कारण नहीं बनेगा"। क्या यह अभी भी सच है? मैंने कल एक परीक्षण चलाया। कल, मैंने मुख्य प्रक्रिया में पृष्ठभूमि सेवा के साथ एक ऐप को हटा दिया। ऐप्स => चल रहे UI में 0 प्रक्रियाएं और 0 सेवाएं दिखाई गईं। बाद में मैंने एक अलग एप्लिकेशन विशिष्ट प्रक्रिया में चलने वाली प्रक्रिया के साथ एक ही ऐप को स्वाइप किया। ऐप्स => चल रहे UI ने कहा कि मेरे पास 0 प्रक्रियाएं और 1 सेवा है। यह एंड्रॉइड 4.4.4 के साथ मोटो एक्स (2014) पर था।
स्टीवन वेक्सलर

@StevenWexler: यह हो सकता है कि सेवा पहले मामले में अपने आप समाप्त हो गई, लेकिन दूसरी नहीं, या यह हो सकता है कि दूसरे परिदृश्य में मुख्य प्रक्रिया निर्धारित (किसी कारण से) कि वह सेवा को रोकना नहीं चाहती थी। निश्चित के लिए जानना मुश्किल है।
एल्डररैथिस

हाल ही की सूची से बाहर स्वाइप करने के बाद शुरू की गई सेवा स्वचालित रूप से फिर से शुरू होती है, इसका ऑनक्रिएट फिर से बुलाया जाता है। लेकिन कुछ ऐप्स में onCreate को onTaskRemoved से पहले और कुछ को onTaskRemoved के बाद कहा जाता है। यह व्यवहार क्यों है?
उमेश

21

कक्षाओं में स्रोत कोड में कुछ जानकारी है com.android.internal.policy.impl.RecentApplicationsBackground और com.android.internal.policy.impl.RecentApplicationsDialog

अगर मैं इन्हें सही ढंग से पढ़ता हूं, तो ऐप्स को चुनने के लिए विशिष्ट हैंडलर हैं, लेकिन उन्हें छोड़कर कुछ भी विशेष नहीं है onDetachedFromWindow(), जो कॉल करता है com.android.View.onDetachedFromWindow()जो मूल रूप से तत्व को छुपाता है और डेटा को साफ करता है। यह इस तथ्य की ओर संकेत करता है कि ऐप को स्वाइप करने पर कुछ भी विशेष नहीं होता है, जो ऑस्टिन मिल्स के उत्तर के साथ मेल खाता है, क्योंकि चूंकि सूची सक्रिय ऐप को नहीं दिखाती है, onPause()और किसी एप्लिकेशन को "छोड़ने" पर अन्य सिस्टम कॉल जो किए जाते हैं। पहले हो चुका।


10

मुझे लगता है कि यह बैक बटन के समान ही करेगा। सिवाय एक छोटे से बदलाव के। यह finish()एप्लिकेशन में सभी गतिविधि / टुकड़े होंगे ।

बस थोड़ा सा selfbuild ऐप के साथ थोड़ा परीक्षण किया। आप परीक्षण भी कर सकते हैं। Heres my टेस्टिंग ऐप: https://bitbucket.org/Leandros99/lifecycletest (डाउनलोड उपलब्ध है, भी। उन लोगों के लिए जो कैंट बिल्ड नहीं कर सकते।)
प्रत्येक गतिविधि जीवनचक्र विधि ( http://developer.android.com/reference/android/app ) में । /Activity.html#ActivityLifecycle ) एप्लिकेशन को एक लॉग प्रिंट करें। आप इसे adb logcat (Android SDK, cd से प्लेटफ़ॉर्म-टूल को cmd / shell और type में स्थापित adb logcatकरें) के साथ देख सकते हैं। अब आप देखेंगे, हर बार जब आप कुछ ऐसा करते हैं जैसे हिट बैक या होम बटन, ऐप जीवनचक्र विधि को प्रिंट करता है, जो ऊपर उल्लेखित है। )

आपका प्रश्न: यदि मैं हाल ही में आए ऐप ड्रावर से ऐप स्वाइप करता हूं, तो onDestroyविधि को कॉल किया जाएगा। यह लगभग बैक बटन के समान है।
आशा है कि मैंने थोड़ी मदद की। अगर सवाल हैं, तो बस पूछिए।


3

यह ऐप और उसके डेटा को बंद कर देता है जो रैम में स्टोर होता है। इस प्रकार, आपको अधिक रैम स्पेस दे रहा है ताकि आप अन्य एप्लिकेशन चला सकें। हालाँकि, बैकग्राउंड सेवाओं का उपयोग ऐप को बंद करने के परिणामस्वरूप स्वचालित रूप से बंद नहीं होता है।


1
यद्यपि रोजमर्रा की भाषा में लिखा गया है, यह वास्तव में एक सटीक सटीक उत्तर है - यह इस तथ्य को पकड़ता है कि प्रक्रिया का निपटान किया जाता है, कुछ अन्य जवाबों के बहुत सारे (जो गलती से इसकी तुलना बटन से करते हैं) गायब हैं। हालाँकि, यहां जो कुछ याद आ रहा है वह यह है कि एंड्रॉइड किसी भी तरह से मेमोरी प्राप्त करने के लिए आवश्यक प्रक्रियाओं का निपटान करेगा, इसलिए जब यह कुछ मेमोरी क्लीनअप को पूरा करता है, तो स्वचालित रूप से यदि / जब जरूरत होगी, तब होगा।
क्रिस स्ट्रैटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.