2011-06-17 13 views
7

एक जटिल कारण के लिए जब मैं होम बटन दबाता हूं तो मुझे अपनी गतिविधियों को समाप्त करने में सक्षम होना चाहिए।एक गतिविधि को कैसे समाप्त करें() एक गतिविधि जब होम बटन दबाया

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

या विकल्प के रूप में, मैं नई गतिविधि किसी भी तरह खत्म() पिछले गतिविधि के लिए मजबूर हो सकती है?

+0

मैं, पारदर्शी गतिविधि से छुटकारा पाने की सलाह देते हैं ताकि लोगों को स्पाइवेयर के रूप में अपने आवेदन का उल्लेख करने के लिए परीक्षा नहीं किया जाएगा। – CommonsWare

+0

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

+1

"मैं नहीं चाहता कि उपयोगकर्ता अन्य ऐप्स खोलें" - यह उपयोगकर्ता के लिए अच्छा क्यों है? "यह भी एक गतिविधि होनी चाहिए क्योंकि मुझे कुछ कॉल करना चाहिए जो केवल यूआई थ्रेड पर उपलब्ध हैं।" -- जैसे कि? केवल ऐसी ही कॉल जिन्हें मैं स्वयं गतिविधियों और विजेट से संबंधित सोच सकता हूं। – CommonsWare

उत्तर

8

क्या

के बारे में
android:launchMode="singleTask" 

या

android:launchMode="singleInstance" 
अपने मेनिफ़ेस्ट में

? मुझे लगता है कि singleTask वह वही है जिसे आप चाहते हैं, लेकिन आप जो भी कर रहे हैं उस पर अभी भी क्रिस्टल स्पष्ट नहीं है।

"प्रणाली, एक नया कार्य और मार्गों इसे करने के लिए आशय की जड़ में गतिविधि पैदा करता है। हालांकि गतिविधि का एक उदाहरण पहले से मौजूद हैं, प्रणाली मार्गों इसके onNewIntent के लिए एक कॉल के माध्यम से मौजूदा उदाहरण के इरादे () एक नया बनाने के बजाय विधि। " singleTask

@Override 
void onPause() { 
    super.onPause(); 
    finish(); 
} 

देव डॉक्स: Acitvity Lifecycle , Finish

+0

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

+2

इसे काम किया !!! यह जवाब निकटतम था, इसलिए मैं इसे स्वीकार करूंगा। मैंने [onUserLeaveHint] पर एक फिनिश() जोड़ा (http://developer.android.com/reference/android/app/Activity.html#onUserLeaveHint()) और यह सुनिश्चित किया कि सभी कॉल शुरू करने के लिए इस गतिविधि से सक्रियता ध्वज ** Intent.FLAG_ACTIVITY_NO_USER_ACTION ** ताकि ** onUserLeaveHint() ** केवल तब कॉल हो जाता है जब उपयोगकर्ता वास्तव में मेरी गतिविधि छोड़ देता है। इन एंड्रॉइड प्लेटफॉर्म लोगों ने सबकुछ सोचा! स्वीकृति के लिए – Yossi

+0

हाहा धन्यवाद, मददगार होने के लिए खुश :) :) –

0

होम बटन प्रेस पर खत्म() के बारे में सुनिश्चित नहीं हैं लेकिन मुझे लगता है कि आप (का उपयोग कर समाप्त कर सकते हैं) पिछले गतिविधि:

Intent i = new Intent(MainActivity.this, SecondActivity.class); 
startActivity(i); 
finish(); 
नहीं

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

+0

यह उस गतिविधि को समाप्त करेगा जिसमें आपने कोड 'फिनिश();' की पंक्ति लिखी थी। @Yossi, शायद एक इरादा भेजें जिसे आप समझ सकते हैं कि इसे खत्म करने का समय है। बस जोर से सोच रहा हूँ। – eternalmatt

+0

एक इरादा भेजना मुझे सोच गया! क्या होगा यदि मेरे विजेट द्वारा उपयोग किए गए लंबित इंटेंट में [लिंक] (http://stackoverflow.com/questions/5979171/clear-all-activities-in-a-task/5979351#5979351) में संदर्भित झंडे शामिल हैं - जो उड़ सकता है लंबी गतिविधियों। मुझे इसे आज़माना है। – Yossi

+0

काम नहीं किया - क्योंकि लिंक में झंडे को एपीआई 11 की आवश्यकता होती है - आज बाजार में 99% उपकरणों के लिए यह बेकार बना रहा है ... – Yossi

0

मैं घर बटन पर ध्वनि बंद करने दबाया जाता है के साथ समस्या थी। मैंने नीचे यह कोड किया था। उम्मीद है कि यह आपकी मदद करेगा। ऑनपॉइड() विधि ओवरराइड करें।

@Override 
public void onPause(){ 
     System.exit(0); 
     super.onPause(); 
} 
+1

धन्यवाद ... मैं गैर-एंड्रॉइड फ्रेमवर्क कॉल का उपयोग करने के बारे में चिंतित हूं। क्या होगा अगर यह मेरे ऐप शट डाउन के लिए अभी भी कुछ (जैसे फाइल पॉइंटर्स) को उड़ाए? – Yossi

3

होम स्क्रीन से लॉन्च की गई गतिविधि पर एंड्रॉइड: clearTaskOnlaunch = "true" सेट करें। उदाहरण:

<activity 
 
      android:name="MainActivity" 
 
      android:exported="true" 
 
      android:clearTaskOnLaunch="true" 
 
      android:label="@string/app_name" 
 
      android:screenOrientation="portrait" > 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.MAIN" /> 
 

 
       <category android:name="android.intent.category.LAUNCHER" /> 
 
      </intent-filter> 
 
     </activity>

+0

कृपया असंबद्ध यूट्यूब लिंक के साथ साइट को स्पैम न करें। – laalto

+0

ठीक है। धन्यवाद .. –

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