2012-06-18 12 views
12

मुझे 4 गतिविधियां मिली हैं Act1, Act2, Act3 और Act4। एक्ट 1 में एक बटन एक्ट 2 खोलता है, एक्ट 2 में एक बटन एक्ट 3 खोलता है, एक्ट 3 में एक बटन एक्ट 4 खोलता है।एप/गतिविधि से बाहर निकलें/समाप्त करें - एंड्रॉइड

मैं चाहता हूँ दो कार्य किए जा रहे हैं:

  1. मैं जो Act1 करने के लिए उपयोगकर्ता निर्देशन Act4 में एक बटन, समस्या जब उपयोगकर्ता Act1 में वापस क्लिक करता है, मैं अनुप्रयोग बंद करना चाहते हैं Act4 खोलने के बजाय ..

  2. जब उपयोगकर्ता इसे चुनता है तो सभी गतिविधियों में मेनू 'बाहर निकलने' में विकल्प होता है, मैं पिछली गतिविधि पर वापस जाने के बजाय ऐप को बंद करना चाहता हूं।

finish(); का उपयोग करने का प्रयास किया लेकिन यह मेरी आवश्यकताओं को पूरा नहीं कर पाया। इस लिंक बाहर

+0

[इस जवाब का प्रयास करें] (http://stackoverflow.com/ए/5140545/940096) – Praveenkumar

+0

आप यहां अपना उत्तर पा सकते हैं ............. [इसे देखें ..........] [1] [1]: http://stackoverflow.com/questions/11077020/exiting-an-android-application-on-back-button/11077196#11077196 – Anu

+0

एक लगभग सटीक कुछ समय पहले पूछा नकली आज आई थी [ यहां] (http://stackoverflow.com/q/11077020/368070) मैं [इस पोस्ट] को पढ़ने की सिफारिश करता हूं (http://stackoverflow.com/questions/2033914/quitting-an-plication-is-that-frowned- आप/2034238 # 2034238 पर) समझने के लिए कि आप जो भी कोशिश कर रहे हैं उसे लागू नहीं करना चाहिए। यहाँ – gideon

उत्तर

25

अपने Act4 'वें Menu.xml के बाहर निकलें बटन में नीचे दिए गए कोड का प्रयोग करें - और

Intent intent = new Intent(Act4.this, Act1.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putExtra("EXIT", true); 
startActivity(intent); 

, आपकी पहली गतिविधि के onCreate() विधि में सिर्फ नीचे कोड डाल -

if (getIntent().getBooleanExtra("EXIT", false)) 
{ 
     finish(); 
} 

यह बाहर निकल जाएगा अपने एप्लिकेशन।

+0

भले ही आप फिनिश() को कॉल करते हैं, आपकी सुपर.ऑनक्रेट() विधि को बिना किसी पर कॉल किया जाएगा। और फिर यदि आप सावधान नहीं हैं तो एंड्रॉइड आपकी संपूर्ण गतिविधि स्टैक को रीसेट कर सकता है। –

+0

@ इगोरजी। फिर, इसे खत्म करने का सबसे अच्छा तरीका क्या है? – Praveenkumar

+0

आपका रास्ता अच्छा है। लेकिन मैं सावधान रहने के लिए कह रहा हूं, कि अगर एक सुपर.ऑनस्ट्राय() या super.onCreate() लंबित है, तो फिर भी कॉल समाप्त करने के बाद उनको कॉल किया जाएगा()। और वह तब होता है जब आप अवांछित व्यवहार कर सकते हैं यदि आपने किसी अन्य गतिविधि को क्रिएट() या ऑनस्यूम() पर उप-वर्गीकृत किया है। –

6

की जांच:

Click here

आप उपयोग कर सकते हैं:

@Override 
public void onBackPressed() 
{ 
    moveTaskToBack(true); 
} 
सभी गतिविधियों में

एप्लिकेशन बंद हुआ।

+0

हाय, क्या आपने पहले यह कोशिश की है? क्योंकि, यह ऐप से बाहर नहीं निकलेगा। यह सिर्फ पृष्ठभूमि में एप चलाता है – Praveenkumar

+0

ठीक है। मैंने एक लिंक दिया है। उस पर सभी उत्तरों की जांच करें। –

+3

यह ऐप से बाहर नहीं निकलता है। यह कार्य को पृष्ठभूमि में ले जाता है। यदि उपयोगकर्ता HOME कुंजी पर लंबे समय तक प्रेस का उपयोग करता है और इस ऐप का चयन करता है, तो वह पहले से ही कार्य में गतिविधियों के साथ अग्रभूमि पर वापस आ जाएगा। –

1

पिछली गतिविधि पर जाने पर पिछली गतिविधि को समाप्त करने का मतलब है finish();startactivity(intent); के बाद लिखें और चौथी गतिविधि के बटन क्लिक ईवेंट से पहली गतिविधि शुरू करने के लिए कोड नीचे लिखें।

Intent in1=new Intent(Act4.this, Act1.class); 
startActivity(in1); 
finish(); 

और सभी गतिविधियों में अपने निकास बटन के क्लिक ईवेंट पर नीचे कोड लिखें।

finish(); 
0

दृष्टिकोण का उपयोग मैं startActivityForResult के साथ सभी बच्चे गतिविधियों शुरू करने के लिए है। फिर मैं माता-पिता के माध्यम से क्या करना है यह निर्धारित करने के लिए किसी भी बच्चे से बाहर निकलने पर राज्य मूल्य का उपयोग करके एक्स्ट्रा ("राज्य", कुछ_वैल्यू) डाल सकता हूं।

अगर मैं एक गहरे बच्चे से ऐप से बाहर निकलना चाहता हूं, तो "राज्य" "बाहर निकलें" होगा और पदानुक्रम में प्रत्येक बच्चे को "बाहर निकलने" के लिए स्ट्रिंग एक्स्ट्रा मिलेगा, एक putExtra ("STATE", "बाहर निकलें ") और कॉल फिनिश() और फिर ऐप अंत में फिनिश() को कॉल करेगा। आप किसी वांछित स्थिति को प्राप्त करने के लिए इसका उपयोग कर सकते हैं।

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

0

यदि आपके पास (गतिविधि गतिविधि स्टैक में) के पीछे एक और गतिविधि है, आप वर्तमान गतिविधि से बाहर निकलने के लिए finish() का उपयोग कर सकते हैं।

हालांकि, बैक फ़ंक्शन भी आपके एप्लिकेशन गतिविधि स्टैक से वर्तमान गतिविधि को हटाने का अनुमान लगाता है।

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

आपके मामले में:

Act 1 -> exit -> Act 2 -> exit -> Act 3 -> exit -> Act 4 -> exit -> Act 1 -> exit 

उपरोक्त विधि सभी गतिविधियों बाहर निकल जाएगा।

हालांकि, अगर आप पृष्ठभूमि में कुछ कोड चलाने के लिए चाहते हैं, तो "गतिविधि" की बजाय "सेवा" पर भरोसा करना बेहतर है। आप अपने असाइन किए गए काम करने के बाद "सेवा" बाहर निकलने दे सकते हैं।

0
Do a 
<code> 

try 
{ 
finalize(); 
finish 
} 
catch(Exception error) 
{ 
error.printStackTrace(); 
} 
//This would exit your App neatly 
</code> 
-1

ट्रे यह एक

Intent intent =new Intent(MainActivity.this, ClassName.class); 
    finish 
startActivity(intent); 
-1

प्रारंभ Activity1 अभिप्राय का उपयोग करके और Activity1 की onBackPressed() में finishAffinity() बुला प्रयास करें।

2
Intent intent = new Intent(Act4.this, Act1.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

पिछली गतिविधि पर वापस जाने से पहले ध्वज साफ़ करें। यह आपकी मदद कर सकता है।

0

मैं इस विधि का उपयोग करता हूं:
1. पहली गतिविधि में स्थिर गतिविधि बनाएं जो शेष गतिविधि को बंद कर देगी।
2. फिर इसे इस तरह की स्थिर विधि में कॉल करें, यह ऐप को जहां भी आप इसे कॉल करेंगे, बंद कर देगा।

public static Activity activity; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    activity=this; 
} 
public static void CloseApp(){ 
    activity.finish(); 
} 
0

उपयोग अपनी AndroidManifest.xml फ़ाइल

<activity 
     android:name=".Act1" 
     android:noHistory="true" /> 
    <activity 
     android:name=".Act2" 
     android:noHistory="true" /> 
    <activity 
     android:name=".Act3" 
     android:noHistory="true" /> 
    <activity 
     android:name=".Act4" 
     android:noHistory="true" /> 
0

जगह अपने ऐप्लिकेशन में इस कोड में android:noHistory = "true" ...

  moveTaskToBack(true); 
      android.os.Process.killProcess(Process.myPid()); 
      System.exit(1);