it-swarm.com.de

Wie kann ich die Anwendung beenden und den Startbildschirm anzeigen?

Ich habe eine Anwendung, auf der ich auf der Startseite Schaltflächen zum Navigieren durch die Anwendung habe.

Auf dieser Seite befindet sich die Schaltfläche "EXIT" (Beenden), mit der der Benutzer zum Startbildschirm des Telefons mit dem Anwendungssymbol weitergeleitet werden soll.

Wie kann ich das machen?

193
poojan9118

Das Design von Android bevorzugt nicht das Beenden einer Anwendung nach Wahl, sondern verwaltet sie über das Betriebssystem. Sie können die Home-Anwendung mit der entsprechenden Absicht aufrufen:

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

Vielleicht können Sie so etwas ausprobieren

Angenommen, in unserer Anwendung gibt es eine Reihe von Aktivitäten (z. B. zehn), und wir müssen diese Aktivität direkt beenden. Was wir tun können, ist, eine Absicht zu erstellen und zur Stammaktivität zu gehen und das Flag in der Absicht als zu setzen

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

fügen Sie der Intention auch ein Extra wie Boolean hinzu

intent.putExtra("EXIT", true);

Überprüfen Sie dann in der Stammaktivität den Wert von boolean und gemäß diesem Aufruf finish () in onCreate() der Stammaktivität

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}
73
Kartik Domadiya
System.exit(0);

Ist wahrscheinlich das, wonach Sie suchen. Es wird die gesamte Anwendung schließen und Sie zum Startbildschirm bringen.

28
Ndupza

Das funktioniert gut für mich.
Schließen Sie alle vorherigen Aktivitäten wie folgt ab:

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("Exit me", true);
    startActivity(intent);
    finish();

Fügen Sie dann in der MainActivity-Methode onCreate () dies hinzu, um die MainActivity zu beenden

    setContentView(R.layout.main_layout);

    if( getIntent().getBooleanExtra("Exit me", false)){
        finish();
        return; // add this to prevent from doing unnecessary stuffs
    }
25
Lazy Ninja

beenden Sie zuerst Ihre Bewerbung mit der Methode finish();

und fügen Sie dann die folgenden Zeilen in onDestroy for Removing Force close hinzu

Android.os.Process.killProcess(Android.os.Process.myPid());
super.onDestroy();
23
user1699548

Wenn Sie eine Aktivität beenden möchten, rufen Sie einfach finish() auf. Es ist jedoch eine schlechte Praxis, eine Schaltfläche zum Beenden auf dem Bildschirm zu haben.

19
Christian

Es wird nicht empfohlen, die Android Anwendung zu beenden. Weitere Informationen finden Sie in Frage .

Der Benutzer kann Ihre App jederzeit über die Home-Schaltfläche oder in der ersten Aktivität über die Zurück-Schaltfläche beenden.

16
Janusz

Einige Aktivitäten, die Sie nicht erneut öffnen möchten, wenn Sie die Zurück-Taste gedrückt haben, sind beispielsweise Begrüßungsbildschirmaktivität, Begrüßungsbildschirmaktivität und Bestätigungsfenster. Eigentlich brauchst du das nicht im Activity Stack. Sie können dies tun, indem Sie => die Datei manifest.xml öffnen und ein Attribut hinzufügen

Android: noHistory = "true"

zu diesen Aktivitäten.

<activity
    Android:name="com.example.shoppingapp.AddNewItems"
    Android:label="" 
    Android:noHistory="true">
</activity>

OR

Manchmal möchten Sie die gesamte Anwendung mit einem bestimmten Druck auf die Zurück-Taste schließen. Hier empfiehlt es sich, das Startfenster zu öffnen, anstatt die Anwendung zu beenden. Dazu müssen Sie die onBackPressed () -Methode überschreiben. In der Regel wird mit dieser Methode die oberste Aktivität im Stapel geöffnet.

@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

}

OR

Wenn Sie die Zurück-Taste gedrückt haben, möchten Sie diese Aktivität beenden und diese auch nicht zum Aktivitätsstapel hinzufügen. Rufen Sie die finish () -Methode in der onBackPressed () -Methode auf. Es wird nicht die gesamte Anwendung schließen. es wird für die vorherige Aktivität im Stapel gehen.

@Override
public void onBackPressed() {
  finish();
}
16
Burusothman

(Ich habe vorhergehende Antworten ausprobiert, aber in einigen Punkten fehlen sie. Wenn Sie zum Beispiel kein return; Nach Beendigung der Aktivität wird der verbleibende Aktivitätscode ausgeführt. Außerdem müssen Sie onCreate with return bearbeiten. Wenn Sie super.onCreate () nicht ausführen, wird ein Laufzeitfehler angezeigt.

Angenommen, Sie haben MainActivity und ChildActivity.

Fügen Sie in ChildActivity Folgendes hinzu:

Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;

Fügen Sie in onCreate von MainActivity Folgendes hinzu:

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}
5
trante

Es gibt eine andere Möglichkeit, die FinishAffinity-Methode zu verwenden, um alle Aufgaben im Stapel zu schließen, die sich auf die App beziehen.

Siehe: https://stackoverflow.com/a/27765687/1984636

4
sivi

Folgendes habe ich getan:

SomeActivity.Java

 @Override
    public void onBackPressed() {
            Intent newIntent = new Intent(this,QuitAppActivity.class);
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(newIntent);
            finish();
    }

QuitAppActivity.Java

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

Im Grunde genommen haben Sie alle Aktivitäten vom Stapel gelöscht und QuitAppActivity gestartet, um die Aufgabe abzuschließen.

3
Irshu

Wenn Sie "finish onDestroy ()" aufrufen, wird diese Aktivität aufgerufen, und es wird zur vorherigen Aktivität im Aktivitätsstapel zurückgekehrt ... Rufen Sie zum Beenden nicht "finish ()" auf.

3
Isham

Ich habe es mit dem Beobachter-Modus gemacht.

Observer-Schnittstelle

public interface Observer {
public void update(Subject subject);
}

Basisfach

public class Subject {
private List<Observer> observers = new ArrayList<Observer>();

public void attach(Observer observer){
    observers.add(observer);
}

public void detach(Observer observer){
    observers.remove(observer);
}

protected void notifyObservers(){
    for(Observer observer : observers){
        observer.update(this);
    }
}
}

Child Subject implementiert die Exit-Methode

public class ApplicationSubject extends Subject {
public void exit(){
    notifyObservers();
}
}

MyApplication, die Ihre Anwendung erweitern soll

public class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

public ApplicationSubject getApplicationSubject() {
            if(applicationSubject == null) applicationSubject = new ApplicationSubject();
    return applicationSubject;
}

}

Basisaktivität

public abstract class BaseActivity extends Activity implements Observer {

public MyApplication app;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    app = (MyApplication) this.getApplication();
    app.getApplicationSubject().attach(this);
}

@Override
public void finish() {
    // TODO Auto-generated method stub
            app.getApplicationSubject().detach(this);
    super.finish();
}

/**
 * exit the app
 */
public void close() {
    app.getApplicationSubject().exit();
};

@Override
public void update(Subject subject) {
    // TODO Auto-generated method stub
    this.finish();
}

}

lass es uns testen

public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    close(); //invoke 'close'
}
}
0
Hunter

Ich habe versucht, die Anwendung mit folgendem Code-Snippet zu beenden. Das hat bei mir funktioniert. Hoffe das hilft dir. Ich habe eine kleine Demo mit 2 Aktivitäten gemacht

erste Aktivität

public class MainActivity extends Activity implements OnClickListener{
    private Button secondActivityBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn);
        secondActivityBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();

        if(pref.getInt("exitApp", 0) == 1){
            editer.putInt("exitApp", 0);
            editer.commit();
            finish();
        }
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.SecondActivityBtn:
            Intent intent= new Intent(MainActivity.this, YourAnyActivity.class);
            startActivity(intent);
            break;
        default:
            break;
        }
    }
}

ihre andere Tätigkeit

public class YourAnyActivity extends Activity implements OnClickListener {
    private Button exitAppBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_any);

        exitAppBtn = (Button) findViewById(R.id.exitAppBtn);
        exitAppBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.exitAppBtn:
            Intent main_intent = new Intent(YourAnyActivity.this,
                    MainActivity.class);
            main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(main_intent);
            editer.putInt("exitApp",1);
            editer.commit();
            break;
        default:
            break;
        }
    }
}
0

100% funktioniert gut. Dies ist der Code zum Beenden Ihrer App. onClick (Methode)

    Button exit = (Button)findViewById(R.id.exitbutton);

    exit.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            finish();
            Android.os.Process.killProcess(Android.os.Process.myPid());
            System.exit(1);
            Toast.makeText(getApplicationContext(), "Closed Completely and Safely", Toast.LENGTH_LONG).show();

        }
    });
0
Vivek Akkaldevi

Fügen Sie nach finish(); in onDestroy() folgende Zeilen ein:

Android.os.Process.killProcess(Android.os.Process.myPid());
super.onDestroy();
0
Ramanathan

wenn Sie die Anwendung beenden möchten, setzen Sie diesen Code unter Ihre Funktion

public void yourFunction()
{
finishAffinity();   
moveTaskToBack(true);

}



//For an instance, if you want to exit an application on double click of a 
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
        // do something on back.
        From Android 16+ you can use the following:

        finishAffinity();
        moveTaskToBack(true);
    }

    return super.onKeyDown(keyCode, event);
}
0
Dila Gurung