प्रोग्राम से एंड्रॉइड ऐप कैसे बाहर निकलें?


94

मुझे यकीन है कि यह सवाल कई बार पूछा गया है क्योंकि मैं कुछ पढ़ता हूं। मेरा मुवक्किल चाहता है कि मैं उसके ऐप में एक बटन लगाऊं जहाँ उपयोगकर्ता क्लिक कर सकें और बाहर निकल सकें। मैंने पढ़ा है यह और बुला पाया finish()यह करना होगा। लेकिन, फिनिश केवल चालू चालू गतिविधि को बंद कर रही है? मेरे पास बहुत सारी गतिविधियां हैं इसलिए इस मामले में मुझे प्रत्येक गतिविधि को उदाहरण के रूप में पास करना है और उन्हें पूरा करना है या हर गतिविधि को सिंगलटन पैटर्न में करना है।

मुझे यह भी पता चला कि Activity.moveTaskToBack(true)आप होम स्क्रीन पर जा सकते हैं। ठीक है, यह प्रक्रिया बंद नहीं कर रहा है, लेकिन इसकी पृष्ठभूमि है। तो क्या यह प्रभावी है?

ऐप को पूरी तरह से बंद करने के लिए मुझे किस विधि का उपयोग करना चाहिए? उपरोक्त वर्णित विधियों में से कोई भी या कोई अन्य विधि / अन्य उपयोग?


क्यों नहीं कार्रवाई पट्टी का उपयोग करें। होम स्क्रीन पर ऐप आइकन नेविगेट पर क्लिक करें। बाहर निकलने के लिए बैकबटन पर क्लिक करें
रघुनंदन

@ रघुनंदन: जैसा कि मैंने उल्लेख किया है, ग्राहक की आवश्यकता :(
पीकगैन

जांचें कि क्या यह android.os.Process.killProcess (android.os.Process.myPid ()) में मदद करता है;
सैन्टर्टन स्टेनली


जवाबों:


70

दरअसल हर एक ऑनक्लिक ईवेंट पर एप्लिकेशन को बंद करने के लिए देख रहा है, जहां भी गतिविधि हो सकती है ...।

तो दोस्तों दोस्तों इस कोड को try करें। इस कोड को ऑनक्लिक ईवेंट पर रखें

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory( Intent.CATEGORY_HOME );
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    startActivity(homeIntent); 

8
यह वास्तव में PeakGen की तरह "एप्लिकेशन को पूरी तरह से बंद नहीं करता है" क्योंकि ऐप अभी भी चल रहा है लेकिन यह एक अच्छा विकल्प है
La masse

2
मुझे ऐसा नहीं लगता an अगर कोई गतिविधि FLAG ACTIVITY NEW
TASK के

51

एपीआई 16 में जारी फिनिशएफ़िनिटी पद्धति, सभी चल रही गतिविधियों को बंद कर देती है और ऐप को बंद कर देती है:

this.finishAffinity();

इस गतिविधि को समाप्त करें और साथ ही साथ वर्तमान कार्य में इसके नीचे की सभी गतिविधियों को समान आत्मीयता से समाप्त करें। यह आमतौर पर तब उपयोग किया जाता है जब किसी एप्लिकेशन को किसी अन्य कार्य पर लॉन्च किया जा सकता है (जैसे कि एक सामग्री के ACTION_VIEW से जो इसे समझता है) और उपयोगकर्ता ने वर्तमान कार्य से बाहर और अपने स्वयं के कार्य में स्विच करने के लिए अप नेविगेशन का उपयोग किया है। इस मामले में, यदि उपयोगकर्ता ने दूसरे एप्लिकेशन की किसी भी अन्य गतिविधियों में नेविगेट किया है, तो उन सभी को कार्य स्विच के भाग के रूप में मूल कार्य से हटा दिया जाना चाहिए।

ध्यान दें कि यह खत्म आपको पिछली गतिविधि के लिए परिणाम देने की अनुमति नहीं देता है, और यदि आप ऐसा करने की कोशिश कर रहे हैं तो एक अपवाद फेंक दिया जाएगा।


एपीआई 21 के बाद से, आप उपयोग कर सकते हैं:

finishAndRemoveTask();

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

विकल्प:

getActivity().finish();
System.exit(0);


int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);


Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);


Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);

स्रोत: प्रोग्राम से एंड्रॉइड एप्लिकेशन कैसे छोड़ें


आशा है कि इससे सहायता मिलेगी! शुभ लाभ!


2
System.exit () का उपयोग न करें। Android के बाहर निकलने के बाद ऐप को पुनः आरंभ करने का प्रयास करेगा। आप एक लूप में समाप्त हो सकते हैं।
AndroidDev

50

आप System.exit () को कॉल कर सकते हैं; सभी तीक्ष्णताओं से बाहर निकलने के लिए।

    submit=(Button)findViewById(R.id.submit);

            submit.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
android.os.Process.killProcess(android.os.Process.myPid());
                    System.exit(1);

                }
            });

5
यह मुझे पहली गतिविधि में ले जा रहा है
पीकगेन

9
@AnchitMittal System.exit (1) गतिविधि स्टैक या कार्यों को रीसेट करने की गारंटी नहीं देगा (देखें डेवलपर .android.com/guide/compenders/… )। इसलिए, यह दृष्टिकोण, उचित समय में ऐप के उचित शटडाउन (सभी गतिविधियों को नष्ट करने) की गारंटी नहीं देता है।
इगोरगानापल्स्की

बाहर निकलने के लिए सभी गतिविधि नहीं।
जितेंद्र

42

यदि आप अपने आवेदन से बाहर निकलना चाहते हैं, तो अपने बटन दबाए गए घटना के अंदर इस कोड का उपयोग करें:

public void onBackPressed() {
  moveTaskToBack(true);
  android.os.Process.killProcess(android.os.Process.myPid());
  System.exit(1);
}

24
 @Override
    public void onBackPressed() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setTitle("Exit Application?");
        alertDialogBuilder
                .setMessage("Click yes to exit!")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                moveTaskToBack(true);
                                android.os.Process.killProcess(android.os.Process.myPid());
                                System.exit(1);
                            }
                        })

                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        dialog.cancel();
                    }
                });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }

4
System.exit (1) के बीच क्या अंतर है; और System.exit (0);
प्या फ्यो जूल

System.exit (1) का अर्थ है कि ऐप कुछ त्रुटि के साथ समाप्त हो गया, जबकि System.exit (0) का अर्थ है कि ऐप बिना किसी त्रुटि के समाप्त हो गया। इस तरह से विभिन्न लिनक्स / यूनिक्स बाहर निकलने पर (त्रुटि) शर्तों को वापस करते हैं।
iOS-Coder


13

दो संभावित स्थितियों में:

  1. आप गतिविधि से बाहर निकलना चाह सकते हैं
  2. या आप एप्लिकेशन से बाहर निकलना चाहते हैं

आप निम्नलिखित कोड का उपयोग करके गतिविधि से बाहर निकल सकते हैं:

var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();

लेकिन यह एक ही एप्लिकेशन में अंतर्निहित गतिविधियों को नहीं मारेगा। यह सिर्फ आवेदन को कम करेगा।

यदि आप आवेदन से बाहर निकलना चाहते हैं तो इसकी प्रक्रिया को समाप्त करने के लिए निम्नलिखित कोड का उपयोग करें:

android.os.Process.killProcess(android.os.Process.myPid()); 

सिर्फ विकास के लिए मोनो का उपयोग करें

process.KillProcess(Process.MyPid());

Mypid () आपकी विधि है या क्या ...... इसलिए u ने Mypid कैसे लिखा है ... u को विधि के साथ लिखना है .....
Amitsharma

@amitsharma MyPid () प्रोसेस क्लास की एक विधि है, जो इस प्रक्रिया के पहचानकर्ता को लौटाती है, जिसका उपयोग किलप्रोसेस (int) और सेंसिग्नल (int, int) के साथ किया जा सकता है
Kasun

क्या यह पृष्ठभूमि सेवा और प्रसारण रिसीवरों को भी रोक देगा या केवल ऐप को सुरक्षित रूप से बंद कर देगा?
उस्मान राणा 12

तो, क्या अंतर है android.os.Process.killProcess(android.os.Process.myPid()); और process.KillProcess(Process.MyPid());?
डायसानियाज़ज़

7

कैसा रहेगा this.finishAffinity()

डॉक्स से,

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


6
android.os.Process.killProcess(android.os.Process.myPid());

मेरे मामले के लिए, इसने मेरी जान बचाई। धन्यवाद!
लाइफका

4

इससे टास्क (गतिविधियों का ढेर) साफ हो जाएगा और नई टास्क शुरू हो जाएगी

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);

बताएं कि आपने इस कोड को एक उत्तर के रूप में क्यों पोस्ट किया है और यह क्या करता है।
एम। अदील खालिद

1
ढेर अतिप्रवाह में आपका स्वागत है! जबकि आपने इस उपयोगकर्ता की समस्या को हल कर लिया है, भविष्य में इस सवाल पर आने वाले उपयोगकर्ताओं के लिए कोड-ओनली उत्तर बहुत उपयोगी नहीं हैं। कृपया अपने उत्तर को यह समझाने के लिए संपादित करें कि आपका कोड मूल समस्या को क्यों हल करता है।
जो सी

3
 @Override
    public void onBackPressed() {
        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory( Intent.CATEGORY_HOME );
        homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(homeIntent);
    }

2

इसे अपने onClic में डालें:

moveTaskToBack(true);
    finish()

नीचे के साथ क्या गलत है। यह उत्तर है। मुझे 2 गतिविधियाँ मिलीं, पहला है लॉगिन एक्टिविटी और दूसरा है मेनएक्टिविटी। .... मैं ऐप को मैनएक्टिविटी के अंदर से बाहर निकालना चाहता था और न ही लॉगिनएक्टिविटी में वापस जाना चाहता हूँ ... मैं यह जवाब देता हूँ, और अब मैं ऐप को एक्टिविटी के भीतर बंद कर सकता हूँ।
अज़ीज़ी मूसा

यदि आप ऐसा करते हैं, तो अनुप्रयोग अभी भी पृष्ठभूमि पर चल रहा है
मोहनद हद्दादीन

अच्छा कर रहा है। मेरा मामला है: splashActivity MainActivity चलाते हैं। जब उपयोगकर्ता MainActivity एप्लिकेशन पर वापस प्रेस करता है तो उम्मीद के मुताबिक बाहर निकलता है। अन्य सभी मामले मुझे छप गतिविधि में वापस मिल गए हैं!
जुविचेस

ठीक है, आपको लॉगिन समाप्त होते ही लॉगिन गतिविधि समाप्त कर लेनी चाहिए :) और उत्तर पूरी तरह से सही नहीं है , movewTaskToBackकुछ भी नहीं समाप्त करता है यह सिर्फ ऐप को छिपाता है, और finishजैसा कि किसी और द्वारा बताया गया है केवल वर्तमान को समाप्त करता है activity। तो यह वर्तमान गतिविधि को छोड़ देता है और बाकी को छिपा देता है, यदि कोई प्रस्तुत करता है। वैसे भी इसे इसके लिए डाउन वोट नहीं मिलना चाहिए ...
मेव कैट 2012

2

एक कॉल पर यह कोशिश करो। मैं कभी-कभी एक बटन के ऑनक्लिक में इसका उपयोग करता हूं।

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

यह आपके ऐप को बंद करने के बजाय, डैशबोर्ड को खोलता है ताकि आपकी ऐप बंद हो जाए।

अधिक स्पष्टता Android के लिए इस प्रश्न को पढ़ें - एक्ज़िट एप्लिकेशन कोड


2

यह प्रयोग करें। फ़िनिशएफ़िनिटी (); खत्म होने के बजाय उस बटन पर (); यदि यह काम नहीं करता है, तो आप अपने जोड़ में Android: noHistory = "true" जोड़कर भी प्रयास कर सकते हैं और फिर uisng finish () द्वारा अपनी गतिविधि समाप्त कर सकते हैं; या फिनिशएफ़िनिटी ();

आशा है कि इससे सहायता मिलेगी....:)


2

Xamarin में उपलब्ध है।

    public override void OnBackPressed()
    {
        MoveTaskToBack(true);
        Process.KillProcess(Process.MyPid());
        Environment.Exit(1);
    }

क्या यह System.Environment.Exit या Android.OS.Environment.Exit का संदर्भ है?
मोफेन

2

बस इन दो कार्यों को बुलाओ

 finish();
 moveTaskToBack(true);

आपका जवाब निम्न गुणवत्ता वाले पदों पर आया। कृपया अपना कोड स्व व्याख्यात्मक होने के बावजूद कुछ स्पष्टीकरण प्रदान करें।
हर्षा बियानी

2
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
System.exit(1);

इस कोड का उपयोग करें यह बहुत उपयोगी है, और आप सभी गतिविधियों से बाहर निकल सकते हैं।


मैंने ऐसा किया, और फिर 5 वीं मंजिल से फोन फेंक दिया, सभी गतिविधियां बंद कर दीं
पासचलिस

1

भूत गतिविधि के साथ बुलाया एकल और खत्म () onCreate चाल करना चाहिए




1

किसी को अभी भी चमत्कार हैं, के लिए Xamarin.Android (मेरे मामले में भी Monogame उस पर चल रहा है) आदेश FinishAndRemoveTask()पर Activityकरता है काम बहुत अच्छी तरह से!



0

बस अपने backpress में कोड का उपयोग करें

                    Intent startMain = new Intent(Intent.ACTION_MAIN);
                    startMain.addCategory(Intent.CATEGORY_HOME);
                    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(startMain);

0

यदि आप गतिविधियों के बीच संवाद करने के लिए अपने आवेदन में EventBus (या वास्तव में किसी अन्य पब / उप पुस्तकालय) का उपयोग कर रहे हैं, तो आप उन्हें एक स्पष्ट घटना भेज सकते हैं:

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

    public static void send()
    {
        EventBus.getDefault().post(new KillItWithFireEvent());
    }
}

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


0

जब आप एप्लिकेशन से बाहर निकलना चाहते हैं, तो बस नीचे दो लाइनें चलाएं

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

0
finish();
 finishAffinity();
 System.exit(0);

मेरे लिए काम किया


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

0

बस इसे कॉल करें:

finishAffinity();

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह कोड क्यों और / या इस बारे में अतिरिक्त संदर्भ प्रदान करता है कि यह प्रश्न इसके दीर्घकालिक मूल्य में सुधार करता है।
इगोर एफ।

0

इस पद्धति को अपने प्रस्थान / निकास बटन से लिंक करें

public void quitGame(View view) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            finishAndRemoveTask();
        } else {
            finish();
        }
    }

-1

यदि आप दोनों फिनिश का उपयोग करते हैं और आपके ऐप से बाहर निकलते हैं, तो आप ईमानदारी से बंद करेंगे

समाप्त();

System.exit (0);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.