2015-11-03 8 views
12

एंड्रॉइड में, यदि आप अपने वर्तमान Activity स्टैक को साफ़ करना चाहते हैं और एक नया Activity लॉन्च करना चाहते हैं (उदाहरण के लिए, ऐप से लॉग आउट करना और Activity में लॉग लॉन्च करना), तो दो दृष्टिकोण दिखाई देते हैं।गतिविधि.फिनिशएफ़िनिटी() बनाम इरादा। FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK

यदि आपका लक्ष्य API स्तर 16 से ऊपर है तो क्या एक दूसरे के लिए कोई फायदे हैं?

1) समाप्त संबंध

कॉलिंग एक गतिविधि से finishAffinity()Activity.finishAffinity

2) आशय झंडे

Intent intent = new Intent(this, LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
finish(); 

finishAffinity() दृष्टिकोण> = एपीआई 16.

Intent झंडे दृष्टिकोण के लिए उपयुक्त है> = एपीआई 11.

के लिए उपयुक्त है स्पष्ट होने के लिए, मौजूदा Activity स्टैक को साफ़ करने के उद्देश्य से, दोनों दृष्टिकोण समान रूप से काम करने लगते हैं। मेरा सवाल यह है कि क्या समस्याएं हैं या तो लोगों ने अनुभव किया है और इसलिए, क्या एक दूसरे को चुनने का कोई कारण है?

उत्तर

10

के ढेर को साफ करता है की कोशिश करो, वहाँ कोई अंतर नहीं है, लेकिन GenyMotion पर इस परीक्षण वहाँ एक मामूली दृश्य अंतर प्रतीत होता है। वेब कास्ट देखें: https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing

आपको यह देखने के लिए उपकरणों की एक श्रृंखला पर कोशिश करने की आवश्यकता होगी कि यह कितना संगत है।

विषयगत रूप से, मैं कहूंगा कि finishAffinity() के साथ जाना क्योंकि यह अधिक स्पष्ट है। हालांकि, अगर आपको < एसडीके 16 का समर्थन करना है तो आपके पास वास्तव में कोई विकल्प नहीं है।

+0

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

+0

इस मामले में यह इरादा संस्करण था जिसमें वीडियो के अनुसार झिलमिलाहट थी। – brindy

+0

असल में, मुझे यकीन नहीं है कि मैं इसे एक झिलमिलाहट (vide के आधार पर) कहूंगा। यद्यपि यद्यपि क्या होता है इसके बारे में कुछ निश्चित रूप से अलग है। खत्म एफ़िनिटी दिखता है जैसे यह शीर्ष पर दिखाई देता है, इरादा संस्करण ऐसा लगता है कि यह स्टैक के शीर्ष पर दूसरे को प्रकट करने के लिए "समाप्त" हो गया है। – brindy

0

आपको इसके लिए इरादा झंडे का उपयोग करना चाहिए।

यदि आपके पास गतिविधियों का एक बड़ा ढेर है, तो क्या आप सभी को समाप्त करने के लिए प्रत्येक से कॉल करेंगे?

केवल एक इरादा कॉल करने के लिए यह बहुत बेहतर और आसान है।

उम्मीद है कि इससे मदद मिलती है।

+0

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

0

इस

Intent.FLAG_ACTIVITY_CLEAR_TOP 

यह कार्यात्मक पिछली गतिविधियों

0

तो एपीआई> = 21, आप के आदेश का उपयोग कर सकते हैं:()

finishAndRemoveTask;

इस कार्य में सभी गतिविधियों को समाप्त करता है और इसे हाल की कार्य सूची से हटा देता है।

https://developer.android.com/reference/android/app/ActivityManager.AppTask.html

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