2012-04-20 3 views
10

मान लें कि एक ऐसा एप्लिकेशन है जो खाता प्रबंधक में खाता बनाता है। उपयोगकर्ता, थोड़ी देर के लिए इस आवेदन के काफी जटिल गतिविधि ग्राफ़ की पड़ताल तो Android सेटिंग में Accounts and Sync को जाता है, में (अभी भी एक अन्य उपयोगकर्ता के रूप में किया जा रहा Accounts and Syncएंड्रॉइड एप्लिकेशन को पर्यावरण में महत्वपूर्ण बदलावों का जवाब कैसे देना चाहिए?

मैं LOGIN_ACCOUNTS_CHANGED प्रसारण के लिए एक रिसीवर को परिभाषित किया है खाते और संकेत को हटा और मैं सभी सेवाओं को गर्व से बंद करने में सक्षम हूं। लेकिन गतिविधियां अभी भी हैं, उनके शीर्षलेख में पहले उपयोगकर्ता का नाम (यूआई कई तरीकों से गड़बड़ हो जाता है, लेकिन यह सबसे स्पष्ट है)।

तो सवाल यह है कि इन अनाथ गतिविधियों के बारे में क्या किया जाना चाहिए?

  • मैं clearTaskOnLaunch जैसे कुछ का उपयोग कर सकता हूं, लेकिन परिवर्तन होने पर सभी गतिविधियां पृष्ठभूमि में होती हैं।
  • साझा किए गए संदर्भों में ध्वज सेट करें और प्रत्येक गतिविधि के onResume() में चेक करें, फिर आवश्यक होने पर clearTask गतिविधि लॉन्च करें? बहुत ही गन्दा।
  • सबसे अच्छा विकल्प मैं सभी गतिविधियों को मारने के लिए android.os.Process.killProcess(android.os.Process.myPid()) का उपयोग करने में सक्षम था। यह बहुत सुंदर नहीं है, लेकिन काम पूरा हो जाता है। एकमात्र साइड इफेक्ट यह है कि गतिविधि स्टैक अभी भी वहां है, जब स्पष्ट इतिहास के साथ सबसे उचित बात LAUNCHER गतिविधि से शुरू होती है।

तो, वर्णित परिदृश्य का जवाब देने का सबसे अच्छा तरीका क्या होगा?

+1

Process.killProcess() का उपयोग करना हमेशा एक हैक है, कभी भी सही समाधान नहीं है। – hackbod

+0

मैं सहमत हूं, इसलिए सवाल है। – Ash

उत्तर

5

क्या आपकी सभी गतिविधियां MyActivity कक्षा से बढ़ी हैं जिनके पास BroadcastReceiver सदस्य है: mChangeReceiver।

onCreate में MyActivity रजिस्टर mChangeReceiver है (और onDestroy में अपंजीकृत), LOGIN_ACCOUNTS_CHANGED आशय करने के लिए।

mChangeReceiver कुछ अमूर्त विधि onAccountChanged() पर कॉल करें कि सभी विस्तारित कक्षाओं को जीयूआई में परिवर्तन को दर्शाने के लिए ओवरराइड और कार्यान्वित करने की आवश्यकता है।

यही है। अब, जब भी खाता बदलता है, तो आपकी सभी जीवित गतिविधियों को उनकी onAccountChanged विधि मिल जाएगी और उनके जीयूआई को रीफ्रेश कर दिया जाएगा।

+2

विचार के लिए धन्यवाद, यह काम कर सकता है।हालांकि मैं ऐसे समाधान की तलाश में था जो एप्लिकेशन को एक तरफ या दूसरे में पुनरारंभ करेगा, क्योंकि एक उपयोगकर्ता के गतिविधि स्टैक को दूसरे के लिए दिखाना अच्छा विचार नहीं लगता है। मैं 'फिनिश()' को कॉल करने का प्रयास करूंगा और देख सकता हूं कि यह कैसा चल रहा है। – Ash

0

मैं कुछ सच है कि आप उन: प्रवेश के तंत्र के आधार पर विचार है:

यूआई, के बारे में

कैसे onPause पर उपयोगकर्ता नाम यूआई (शायद TextView) को अद्यतन करने के बारे में "" और onResume पर वर्तमान उपयोगकर्ता के लिए इसे अपडेट करने के लिए ?

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

गतिविधियों को संभालने का एक और तरीका इसके बजाय टुकड़े के ढेर का उपयोग करना है। अधिक जानकारी के लिए खंड स्टैक के एंड्रॉइड समर्थन उदाहरणों की जांच करें।

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

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