एंड्रॉइड एप्लिकेशन कैसे बंद करें?


157

मैं अपने एप्लिकेशन को बंद करना चाहता हूं, ताकि यह अब पृष्ठभूमि में न चले।

उसको कैसे करे? क्या यह एंड्रॉइड प्लेटफॉर्म पर अच्छा अभ्यास है?

अगर मैं "बैक" बटन पर भरोसा करता हूं, तो यह ऐप को बंद कर देता है, लेकिन यह बैकग्राउंड में रहता है। यहां तक ​​कि "टास्ककिलर" नामक एप्लिकेशन भी है जो पृष्ठभूमि में उन ऐप्स को मारने के लिए है।


4
यह सवाल पहले ही पूछा जा चुका है। Stackoverflow.com/questions/2033914/… या stackoverflow.com/questions/2042222/android-close-application
डेव वेब

सोच रहा था कि कोई अपने ऐप को बैकग्राउंड में भी क्यों नहीं चलाना चाहेगा?
दरपन '

जवाबों:


139

एंड्रॉइड में एक तंत्र है जो अपने प्रलेखन के अनुसार किसी एप्लिकेशन को सुरक्षित रूप से बंद करने के लिए है। अंतिम गतिविधि में जो बाहर है (आमतौर पर मुख्य गतिविधि जो पहली बार शुरू हुई थी जब आवेदन शुरू हुआ था) बस ऑनडेस्ट्रो () विधि में कुछ पंक्तियों को रखें। System.runFinalizersOnExit (true) पर कॉल यह सुनिश्चित करता है कि आवेदन के बाहर आने पर सभी वस्तुओं को अंतिम रूप दिया जाएगा और कचरा एकत्र किया जाएगा। यदि आप चाहें तो आप android.os.Process.killProcess (android.os.Process.myPid ()) के माध्यम से किसी एप्लिकेशन को जल्दी से मार सकते हैं। ऐसा करने का सबसे अच्छा तरीका एक सहायक कक्षा में निम्नलिखित की तरह एक विधि है और फिर जब भी ऐप को मारना होगा, तब इसे कॉल करें। उदाहरण के लिए रूट गतिविधि की विध्वंस विधि (यह मानते हुए कि ऐप इस गतिविधि को कभी नहीं मारता):

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

किसी भी मेनू के लिए और मेनू द्वारा शुरू की गई गतिविधियों में गृह कुंजी को संभालने के लिए मत भूलना । वही SEARCH कुंजी के लिए जाता है । नीचे उदाहरण के लिए कुछ उदाहरण दिए गए हैं:

यहां एक रूट एक्टिविटी का एक उदाहरण दिया गया है जो नष्ट होने पर एप्लिकेशन को मारता है:

package android.example;

/**
 * @author Danny Remington - MacroSolve
 */

public class HomeKey extends CustomActivity {

    public void onDestroy() {
        super.onDestroy();

        /*
         * Kill application when the root activity is killed.
         */
        UIHelper.killApp(true);
    }

}

यहां एक अमूर्त गतिविधि है जिसे गृह कुंजी को संभालने के लिए बढ़ाया जा सकता है, जो इसे विस्तारित करती है:

package android.example;

/**
 * @author Danny Remington - MacroSolve
 */

import android.app.Activity;
import android.view.Menu;
import android.view.MenuInflater;

/**
 * Activity that includes custom behavior shared across the application. For
 * example, bringing up a menu with the settings icon when the menu button is
 * pressed by the user and then starting the settings activity when the user
 * clicks on the settings icon.
 */
public abstract class CustomActivity extends Activity {
    public void onStart() {
        super.onStart();

        /*
         * Check if the app was just launched. If the app was just launched then
         * assume that the HOME key will be pressed next unless a navigation
         * event by the user or the app occurs. Otherwise the user or the app
         * navigated to this activity so the HOME key was not pressed.
         */

        UIHelper.checkJustLaunced();
    }

    public void finish() {
        /*
         * This can only invoked by the user or the app finishing the activity
         * by navigating from the activity so the HOME key was not pressed.
         */
        UIHelper.homeKeyPressed = false;
        super.finish();
    }

    public void onStop() {
        super.onStop();

        /*
         * Check if the HOME key was pressed. If the HOME key was pressed then
         * the app will be killed. Otherwise the user or the app is navigating
         * away from this activity so assume that the HOME key will be pressed
         * next unless a navigation event by the user or the app occurs.
         */
        UIHelper.checkHomeKeyPressed(true);
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.settings_menu, menu);

        /*
         * Assume that the HOME key will be pressed next unless a navigation
         * event by the user or the app occurs.
         */
        UIHelper.homeKeyPressed = true;

        return true;
    }

    public boolean onSearchRequested() {
        /*
         * Disable the SEARCH key.
         */
        return false;
    }
}

यहां एक मेनू स्क्रीन का उदाहरण दिया गया है जो गृह कुंजी को संभालती है :

/**
 * @author Danny Remington - MacroSolve
 */

package android.example;

import android.os.Bundle;
import android.preference.PreferenceActivity;

/**
 * PreferenceActivity for the settings screen.
 * 
 * @see PreferenceActivity
 * 
 */
public class SettingsScreen extends PreferenceActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.layout.settings_screen);
    }

    public void onStart() {
        super.onStart();

        /*
         * This can only invoked by the user or the app starting the activity by
         * navigating to the activity so the HOME key was not pressed.
         */
        UIHelper.homeKeyPressed = false;
    }

    public void finish() {
        /*
         * This can only invoked by the user or the app finishing the activity
         * by navigating from the activity so the HOME key was not pressed.
         */
        UIHelper.homeKeyPressed = false;
        super.finish();
    }

    public void onStop() {
        super.onStop();

        /*
         * Check if the HOME key was pressed. If the HOME key was pressed then
         * the app will be killed either safely or quickly. Otherwise the user
         * or the app is navigating away from the activity so assume that the
         * HOME key will be pressed next unless a navigation event by the user
         * or the app occurs.
         */
        UIHelper.checkHomeKeyPressed(true);
    }

    public boolean onSearchRequested() {
        /*
         * Disable the SEARCH key.
         */
        return false;
    }

}

यहाँ एक सहायक वर्ग का उदाहरण दिया गया है जो ऐप में गृह कुंजी को संभालता है :

package android.example;

/**
 * @author Danny Remington - MacroSolve
 *
 */

/**
 * Helper class to help handling of UI.
 */
public class UIHelper {
    public static boolean homeKeyPressed;
    private static boolean justLaunched = true;

    /**
     * Check if the app was just launched. If the app was just launched then
     * assume that the HOME key will be pressed next unless a navigation event
     * by the user or the app occurs. Otherwise the user or the app navigated to
     * the activity so the HOME key was not pressed.
     */
    public static void checkJustLaunced() {
        if (justLaunched) {
            homeKeyPressed = true;
            justLaunched = false;
        } else {
            homeKeyPressed = false;
        }
    }

    /**
     * Check if the HOME key was pressed. If the HOME key was pressed then the
     * app will be killed either safely or quickly. Otherwise the user or the
     * app is navigating away from the activity so assume that the HOME key will
     * be pressed next unless a navigation event by the user or the app occurs.
     * 
     * @param killSafely
     *            Primitive boolean which indicates whether the app should be
     *            killed safely or quickly when the HOME key is pressed.
     * 
     * @see {@link UIHelper.killApp}
     */
    public static void checkHomeKeyPressed(boolean killSafely) {
        if (homeKeyPressed) {
            killApp(true);
        } else {
            homeKeyPressed = true;
        }
    }

    /**
     * Kill the app either safely or quickly. The app is killed safely by
     * killing the virtual machine that the app runs in after finalizing all
     * {@link Object}s created by the app. The app is killed quickly by abruptly
     * killing the process that the virtual machine that runs the app runs in
     * without finalizing all {@link Object}s created by the app. Whether the
     * app is killed safely or quickly the app will be completely created as a
     * new app in a new virtual machine running in a new process if the user
     * starts the app again.
     * 
     * <P>
     * <B>NOTE:</B> The app will not be killed until all of its threads have
     * closed if it is killed safely.
     * </P>
     * 
     * <P>
     * <B>NOTE:</B> All threads running under the process will be abruptly
     * killed when the app is killed quickly. This can lead to various issues
     * related to threading. For example, if one of those threads was making
     * multiple related changes to the database, then it may have committed some
     * of those changes but not all of those changes when it was abruptly
     * killed.
     * </P>
     * 
     * @param killSafely
     *            Primitive boolean which indicates whether the app should be
     *            killed safely or quickly. If true then the app will be killed
     *            safely. Otherwise it will be killed quickly.
     */
    public static void killApp(boolean killSafely) {
        if (killSafely) {
            /*
             * Notify the system to finalize and collect all objects of the app
             * on exit so that the virtual machine running the app can be killed
             * by the system without causing issues. NOTE: If this is set to
             * true then the virtual machine will not be killed until all of its
             * threads have closed.
             */
            System.runFinalizersOnExit(true);

            /*
             * Force the system to close the app down completely instead of
             * retaining it in the background. The virtual machine that runs the
             * app will be killed. The app will be completely created as a new
             * app in a new virtual machine running in a new process if the user
             * starts the app again.
             */
            System.exit(0);
        } else {
            /*
             * Alternatively the process that runs the virtual machine could be
             * abruptly killed. This is the quickest way to remove the app from
             * the device but it could cause problems since resources will not
             * be finalized first. For example, all threads running under the
             * process will be abruptly killed when the process is abruptly
             * killed. If one of those threads was making multiple related
             * changes to the database, then it may have committed some of those
             * changes but not all of those changes when it was abruptly killed.
             */
            android.os.Process.killProcess(android.os.Process.myPid());
        }

    }
}

1
यह संपूर्ण एप्लिकेशन को मारने वाला माना जाता है, जिसे System.exit (0) कहा जाता है, जिसमें उन सभी गतिविधियों को शामिल किया जाता है जो एप्लिकेशन के भाग के रूप में चल रही हैं। अन्य सभी एप्लिकेशन चलते रहेंगे। यदि आप एप्लिकेशन में केवल एक गतिविधि को मारना चाहते हैं, लेकिन एप्लिकेशन में सभी गतिविधियां नहीं हैं, तो आपको उस गतिविधि की समाप्ति () विधि को कॉल करना होगा जिसे आप मारना चाहते हैं।
डैनी रेमिंगटन - OMS

2
इस nfo के लिए बहुत बहुत धन्यवाद। मैं एंडगाइन के साथ एक गेम बना रहा हूं और जब मैं खत्म करूंगा, यहां तक ​​कि सभी गतिविधियों पर भी, एंड्रॉइड अभी भी पूरी तरह से साफ नहीं होगा और जब गेम को फिर से लॉन्च किया गया था, तो यह पूरी तरह से खराब हो जाएगा मेरे जीएल बनावट सभी गड़बड़ हो गए थे आदि। इसलिए जांच करने के बाद, यह सोचकर कि यह एन्गिडीइन था, मुझे एहसास हुआ कि यह कुछ ऐसा था जो गलत हो रहा था क्योंकि एंड्रॉइड इस प्रक्रिया को संरक्षित करने की कोशिश कर रहा था जब मैं इसे बाहर निकलने के लिए इच्छुक था। सभी टिप्पणियाँ "ओह आप एक्जिट नहीं कह सकते, यह उपयोगकर्ता के अनुभव को बर्बाद करता है" बकवास है। मौसम एक आवेदन खुला रहना चाहिए .......

17
कोई भी उत्पादन एप्लिकेशन इस कोड का उपयोग नहीं करना चाहिए। कोई भी उत्पादन एप्लिकेशन को दिखाए गए किसी भी कोड को कॉल नहीं करना चाहिए killApp(), क्योंकि Google ने संकेत दिया है कि यह अप्रत्याशित व्यवहार को जन्म देगा।
कॉमन्सवेयर जूल 29'11

1
System.runFinalizersOnExit (सही); विधि को पदावनत किया जाता है, किसी एप्लिकेशन को सुरक्षित रूप से बंद करने का एक और तरीका क्या है (कचरा एकत्र किया गया)?।
अजेय

1
यह उस समय नहीं निकाला गया था जब यह मूल रूप से पोस्ट किया गया था। चूंकि वर्तमान एपी तब 7 था और वर्तमान एपीआई अब 19 है, अब ऐसा करने का एक और तरीका है।
डैनी रेमिंग्टन - ओएमएस

68

हाँ! आप अपने एप्लिकेशन को निश्चित रूप से बंद कर सकते हैं, इसलिए यह पृष्ठभूमि में नहीं चल रहा है। जैसे अन्य लोगों ने टिप्पणी की finish()है कि Google अनुशंसित तरीका है जिसका वास्तव में मतलब नहीं है कि आपका कार्यक्रम बंद है।

System.exit(0);

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

मैं व्यक्तिगत रूप से घृणा करता हूं जब मैं एक आवेदन में बाहर निकलें का चयन करता हूं और यह वास्तव में बाहर नहीं निकलता है।


44
System.exit () का उपयोग करना बिल्कुल अनुशंसित नहीं है।
कॉमन्सवेयर

14
मैं यह तर्क नहीं दूंगा कि यह अनुशंसित तरीका नहीं है, लेकिन क्या आप कृपया एक समाधान प्रदान कर सकते हैं जो यह गारंटी देगा कि आवेदन पृष्ठभूमि से तुरंत बाहर हो गया है? यदि नहीं तो System.exit Google जाने का एक बेहतर तरीका है।
कैमरन मैकब्राइड

74
कौन तय करता है कि आप "माना" नहीं हैं, वही लोग हैं जिन्होंने एक ऐसी विधि बनाई है जो वास्तव में बाहर नहीं निकलती है? यदि उपयोगकर्ता अपने एप्लिकेशन को बंद नहीं करना चाहते हैं, तो 5 वां सबसे लोकप्रिय भुगतान ऐप एक कार्य हत्यारा नहीं होगा। लोगों को मेमोरी की आवश्यकता होती है और कोर ओएस काम नहीं करता है।
कैमरून मैकब्राइड

19
सहमत हैं कि इसकी सलाह दी गई है, लेकिन पूछे गए प्रश्न का वास्तविक उत्तर देने के लिए अप-वोट किया गया है। बिना किसी अनुवर्ती स्पष्टीकरण के, "आप वास्तव में ऐसा नहीं करना चाहते हैं" सुनकर मैं बहुत थक गया हूँ। IPhone की तुलना में इस प्रकार की चीज़ों के दस्तावेज़ीकरण के बारे में Android एक पूर्ण दुःस्वप्न है।
डगडब्लू

11
एंड्रॉइड के साथ कार्य हत्यारों का उपयोग करने में कोई स्मृति लाभ नहीं है। एंड्रॉइड उन सभी एप्लिकेशन को नष्ट और साफ कर देगा जो अग्रभूमि में नहीं हैं यदि अग्रभूमि ऐप को अधिक मेमोरी की आवश्यकता है। कुछ मामलों में एंड्रॉइड एक ऐप को भी फिर से खोल देता है जिसे टास्क किलर के साथ बंद किया गया था। एंड्रॉइड ऐप स्विच समय को कम करने के लिए हाल ही में उपयोग किए गए एप्लिकेशन के साथ सभी आवश्यक मेमोरी को नहीं भरेगा। एग्जिट बट्टन के साथ APPS का निर्माण न करें। ANDROID पर एक TASK प्रबंधक का उपयोग न करें। geekfor.me/faq/you-shouldnt-be-using-a-task-killer-with-android android-developers.blogspot.com/2010/04/…
Janusz

23

यह मैंने ऐसा किया है:

मैंने अभी डाला

Intent intent = new Intent(Main.this, SOMECLASSNAME.class);
Main.this.startActivityForResult(intent, 0);

किसी गतिविधि को खोलने वाली पद्धति के अंदर, फिर SOMECLASSNAME की विधि के अंदर जो कि मेरे द्वारा दिए गए ऐप को बंद करने के लिए डिज़ाइन किया गया है:

setResult(0);
finish();

और मैंने अपनी मुख्य कक्षा में निम्नलिखित बातें रखीं:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == 0) {
        finish();
    }
}

18

बस इतने समय के बाद मेरे अपने प्रश्न का उत्तर देने के लिए (क्योंकि कॉमन्सवेयर ने सबसे लोकप्रिय उत्तर पर टिप्पणी करते हुए कहा कि हमें ऐसा नहीं करना चाहिए):

जब मैं ऐप छोड़ना चाहता हूं:

  1. मैं अपनी पहली गतिविधि शुरू करता हूं (या तो स्प्लैश स्क्रीन, या जो भी गतिविधि वर्तमान में गतिविधि स्टैक के निचले भाग में है) FLAG_ACTIVITY_CLEAR_TOP(जो इसके बाद शुरू हुई अन्य सभी गतिविधियों को छोड़ देगा, जिसका अर्थ है - उन सभी को)। बस इस गतिविधि को गतिविधि स्टैक में करने के लिए करें (अग्रिम में किसी कारण से इसे समाप्त न करें)।
  2. मैं finish()इस गतिविधि पर कॉल करता हूं

यह वह है, जो मेरे लिए काफी अच्छा काम करता है।


3
यह वास्तव में आपके ऐप को नहीं मारता है। यह अभी भी ऐप सूची में दिखाई देगा। मैं सिर्फ आपकी सभी गतिविधियों को मारता हूं।
जोरिस वीमार

1
FLAG_ACTIVITY_CLEAN_TOP सोनी स्मार्टफ़ोन के लिए काम नहीं करता है। आप इसे जोड़ सकते हैं कि Android को जोड़कर: clearTaskOnLaunch = "true" विशेषता को AndroidManifest.xml पर गतिविधि करें
Rusfearuth

10

बस इस कोड को अपने बटन पर लिखें EXIT क्लिक करें।

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("LOGOUT", true);
startActivity(intent);

और अपने MainActivity.class की onCreate () विधि में पहली पंक्ति के रूप में कोड के नीचे लिखें,

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

9

यह फ्रेमवर्क एपीआई का उपयोग करना संभव नहीं है। यह ऑपरेटिंग सिस्टम (एंड्रॉइड) के विवेक पर तय करना है कि किसी प्रक्रिया को हटाया जाना चाहिए या मेमोरी में रहना चाहिए। यह दक्षता कारणों के लिए है: यदि उपयोगकर्ता एप्लिकेशन को फिर से लॉन्च करने का निर्णय लेता है, तो यह पहले से ही है इसके बिना इसे मेमोरी में लोड किया जाना है।

तो नहीं, यह न केवल हतोत्साहित है , ऐसा करना असंभव है।


4
आप हमेशा Integer z = null की तरह कुछ कर सकते हैं; z.intValue (); // सबसे खराब उत्तर
जो प्लांटे

6
सच है। आप दीवार के खिलाफ अपने फोन को भी तोड़ सकते हैं, अगर पर्याप्त दबाव लागू होता है तो सभी खुले अनुप्रयोगों को समाप्त कर देगा। मैं अब भी इसकी सिफारिश नहीं करूंगा। मैंने उसी के अनुसार अपनी पोस्ट अपडेट की है।
मथायस

@JoePlante जो एप्स मेनू खोलने पर बैकग्राउंड में एप को भी छोड़ देता है। ऐसा लगता है कि यह असंभव है।
परसिटयूसर

8

ऐप से बाहर निकलने के लिए:

रास्ता 1:

कॉल करें finish();और ओवरराइड करें onDestroy();। निम्नलिखित कोड डालें onDestroy():

System.runFinalizersOnExit(true)

या

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

रास्ता 2:

public void quit() {
    int pid = android.os.Process.myPid();
    android.os.Process.killProcess(pid);
    System.exit(0);
}

रास्ता 3:

Quit();

protected void Quit() {
    super.finish();
}

रास्ता 4:

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

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

रास्ता 5:

कभी-कभी कॉलिंग finish()केवल वर्तमान गतिविधि से बाहर निकल जाएगी, न कि संपूर्ण एप्लिकेशन। हालाँकि, इसके लिए वर्कअराउंड है। हर बार जब आप एक शुरुआत करते हैं activity, तो इसका उपयोग करना शुरू करें startActivityForResult()। जब आप संपूर्ण एप्लिकेशन को बंद करना चाहते हैं, तो आप निम्न की तरह कुछ कर सकते हैं:

setResult(RESULT_CLOSE_ALL);
finish();

फिर हर गतिविधि के onActivityResult(...)कॉलबैक को परिभाषित करें, जब मूल्य के activityसाथ रिटर्न RESULT_CLOSE_ALL, यह भी कॉल करता है finish():

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(resultCode){
        case RESULT_CLOSE_ALL:{
            setResult(RESULT_CLOSE_ALL);
            finish();
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

आशय इरादे = नया इरादा (getApplicationContext (), LoginActivity.class); intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); आशय .putExtra ("बाहर निकलें", सच); startActivity (आशय); सुपर ठीक काम कर रहा है।
hitesh141

मैंने गतिविधि A-> B-> C-> D शुरू किया है। जब गतिविधि पर बैक बटन दबाया जाता है तो DI गतिविधि ए पर जाना चाहता है क्योंकि A मेरा शुरुआती बिंदु है और इसलिए पहले से ही स्टैक पर A के शीर्ष की सभी गतिविधियाँ साफ़ हो जाती हैं और आप A से किसी अन्य गतिविधि पर वापस नहीं जा सकते हैं । @ ऑवरराइड पब्लिक बूलियन ऑनकेडाउन (int keyCode, KeyEvent इवेंट) {if (keyCode == KeyEvent.KEYCODE_BACK) {इरादे a = नया इरादा (यह, A.class); a.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity (क); सच लौटना; } वापसी super.onKeyDown (कीकोड, ईवेंट); }
hitesh141

5

इस तरह से विंडोज मोबाइल ... के लिए काम किया है ... कभी! इस मामले पर Microsoft का क्या कहना है:

http://blogs.msdn.com/windowsmobile/archive/2006/10/05/The-Emperor-Has-No-Close.aspx (क्या यह दुखद है कि मुझे 2006 से सभी तरह ब्लॉग पोस्ट का शीर्षक याद था? मैंने Google पर "सम्राट का कोई करीबी" योग्य नहीं है

संक्षेप में:

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

ओ'रेली में इस सवाल में कई टिप्पणियां बताती हैं कि एंड्रॉइड उसी तरह से व्यवहार करता है, जो एप्लिकेशन को कुछ समय के लिए उपयोग नहीं किया जाता है जब एंड्रॉइड को वे मेमोरी की आवश्यकता होती है जो वे उपयोग कर रहे हैं।

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


5

finish()किसी गतिविधि पर विधि को कॉल करने से उस वर्तमान गतिविधि पर आपका वांछित प्रभाव पड़ता है।


14
नहीं, यह नहीं है। यह वर्तमान गतिविधि को पूरा करता है, न कि एप्लिकेशन को। यदि आप कार्य स्टैक पर सबसे नीचे की गतिविधि () समाप्त करते हैं, तो आपका आवेदन बाहर निकल जाएगा, लेकिन एंड्रॉइड वास्तव में इसे तब तक के लिए बनाए रखने का निर्णय ले सकता है जब तक यह फिट दिखता है।
मथियास

वास्तव में, हालांकि यदि आपको अपने आवेदन से पूरी तरह से बाहर निकलने की आवश्यकता है, तो आपको प्रत्येक गतिविधि के लिए फिनिश विधि को कॉल करने की आवश्यकता है और आपके द्वारा शुरू की गई किसी भी सेवा के बारे में भी सोचना चाहिए। मैंने प्रारंभिक उत्तर को भी संपादित किया है - चूक के लिए क्षमा करें।
r1k0

3

उपरोक्त सभी में से कोई भी उत्तर मेरे ऐप पर अच्छा काम नहीं कर रहा है

यहाँ मेरा काम कोड है

अपने निकास बटन पर:

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
mainIntent.putExtra("close", true);
startActivity(mainIntent);
finish();

यह कोड किसी भी अन्य गतिविधि को बंद करने और MainActivity को आपके MainActivity पर लाने के लिए है:

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

2

finish();नीचे एक बयान डालें:

myIntent.putExtra("key1", editText2.getText().toString());

finish();

LoginActivity.this.startActivity(myIntent);

हर गतिविधि में।



2

पहले गतिविधि टैग के तहत कोड के नीचे कॉपी करें और AndroidManifest.xml फ़ाइल पेस्ट करें।

<activity                        
            android:name="com.SplashActivity"
            android:clearTaskOnLaunch="true" 
            android:launchMode="singleTask"
            android:excludeFromRecents="true">              
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER"
                />
            </intent-filter>
        </activity>     

AndroidManifest.xml फ़ाइल में गतिविधि टैग के अंतर्गत सभी के नीचे यह कोड भी जोड़ें

 android:finishOnTaskLaunch="true"

1

2.3 के साथ संभव नहीं है। मैं बहुत से खोज करता हूं, और कई ऐप्स आज़माता हूं। सबसे अच्छा समाधान दोनों को स्थापित करना है (गो टास्कमैनर) और (तेज़ रीबूट)। जब वे एक साथ उपयोग करते हैं तो यह काम करेगा, और स्मृति को मुक्त करेगा। एक अन्य विकल्प एंड्रॉइड आइसक्रीम सैंडविच 4.0.4 में अपग्रेड करना है जो ऐप्स को नियंत्रित (बंद) करने की अनुमति देता है।


1

मैं अपने Android डिवाइस की होम स्क्रीन पर लौटना चाहता था, इसलिए मैंने बस उपयोग किया:

moveTaskToBack(true);

यह इस सवाल का जवाब नहीं है
सिंह

1

उपयोग की finishAffinity()एक अच्छा विकल्प हो सकता है, तो आप अनुप्रयोग के सभी गतिविधि बंद करना चाहते हैं। Android डॉक्स के अनुसार-

Finish this activity as well as all activities immediately below it in the current task that have the same affinity.

1
public class CloseAppActivity extends AppCompatActivity
{
    public static final void closeApp(Activity activity)
    {
        Intent intent = new Intent(activity, CloseAppActivity.class);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
        activity.startActivity(intent);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        finish();
    }
}

और प्रकट में:

<activity
     android:name=".presenter.activity.CloseAppActivity"
     android:noHistory="true"
     android:clearTaskOnLaunch="true"/>

फिर आप कॉल कर सकते हैं CloseAppActivity.closeApp(fromActivity)और एप्लिकेशन बंद हो जाएगा।


1

बस onBackPressed में निम्नलिखित कोड लिखें:

@Override
public void onBackPressed() {
    // super.onBackPressed();

    //Creating an alert dialog to logout
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("Do you want to Exit?");
    alertDialogBuilder.setPositiveButton("Yes",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    Intent intent = new Intent(Intent.ACTION_MAIN);
                    intent.addCategory(Intent.CATEGORY_HOME);
                    startActivity(intent);
                }
            });

    alertDialogBuilder.setNegativeButton("No",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {

                }
            });

    //Showing the alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.show();
}

0

कॉल खत्म करके (); ऑनक्लिक बटन पर या मेनू पर

मामला R.id.menu_settings:

      finish();
     return true;

जैसा कि अन्य उत्तर की टिप्पणियों में कहा गया है, finish()ऐप को नहीं मारता है। यह पिछले इरादे पर वापस जा सकता है या ऐप को बैकग्राउंड कर सकता है।
रैप्टर

0

मुझे लगता है कि यह आपकी गतिविधि और उससे संबंधित सभी सब गतिविधि को बंद कर देगा।

public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();]
        if (id == R.id.Exit) {
            this.finishAffinity();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

0

तालिका System.exit का उपयोग करने का सबसे अच्छा और छोटा तरीका।

System.exit(0);

VM आगे निष्पादन बंद कर देता है और प्रोग्राम बाहर निकल जाएगा।


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