wake-up-neo.com

Wie kann ich eine Android-App programmgesteuert beenden?

Ich bin sicher, dass diese Frage mehrmals gestellt wurde, weil ich einige gelesen habe. Mein Kunde möchte, dass ich eine Schaltfläche in seine App stecke, in der Benutzer klicken und das Programm beenden können. Ich habe this gelesen und festgestellt, dass der Aufruf von finish() es tut. Aber das Ziel schließt nur die laufende Aktivität, oder? Ich habe viele Aktivitäten, also muss ich in diesem Fall jede Instanz jeder Aktivität passieren und sie beenden oder jede Aktivität in das Singleton-Muster bringen. 

Ich habe auch erfahren, dass Activity.moveTaskToBack(true) Sie in den Startbildschirm bringen kann. OK, das schließt nicht ab, sondern den Prozess als Hintergrund. Ist das also effektiv?

Welche Methode sollte ich verwenden, um die App vollständig zu schließen? Eine der oben beschriebenen oder eine andere Methode/sonstige Verwendung der oben genannten Methoden?

52

Tatsächlich sucht jeder nach dem Schließen der Anwendung bei einem Onclick-Ereignis, wo immer es Aktivitäten gibt. 

Also versuchen Freunde, diesen Code. Setzen Sie diesen Code in das Ereignis "onclick" 

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

Sie können System.exit () aufrufen. aus allen Aktivitäten herauskommen.

    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);

                }
            });
39
Anchit Mittal

Wenn Sie Ihre Anwendung beenden möchten, verwenden Sie diesen Code in Ihrem Ereignis mit gedrückter Taste:

public void onBackPressed() {
  moveTaskToBack(true);
  Android.os.Process.killProcess(Android.os.Process.myPid());
  System.exit(1);
}
29
Pir Fahim Shah
 @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();
    }
19
Aditya_Android

Es ist viel zu einfach. Verwenden Sie System.exit(0);

17
Amon Olimov

Zufällig gibt es zwei mögliche Situationen:

  1. Möglicherweise möchten Sie die Aktivität beenden
  2. Oder Sie möchten die Anwendung beenden

Sie können die Aktivität mit folgendem Code beenden:

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

Die zugrunde liegenden Aktivitäten in derselben Anwendung werden dadurch jedoch nicht beendet. Dies verringert nur die Anwendung.

Wenn Sie die Anwendung beenden möchten, beenden Sie den Prozess mit dem folgenden Code:

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

für Mono-Entwicklung einfach verwenden 

process.KillProcess(Process.MyPid());
11
Kasun

Seit Api 16 können Sie die finishAffinity-Methode verwenden, die dem Schließen und Schließen aller zugehörigen Aktivitäten mit Namen und Javadoc-Beschreibung ziemlich nahe zu sein scheint:

this.finishAffinity();

Beenden Sie diese Aktivität sowie alle unmittelbar darunter liegenden Aktivitäten in der aktuellen Aufgabe, die die gleiche Affinität aufweisen. Dies wird normalerweise verwendet, wenn eine Anwendung für eine andere Task gestartet werden kann (z. B. von einem ACTION_VIEW eines Inhaltstyps, den sie versteht) und der Benutzer die Aufwärtsnavigation verwendet hat, um von der aktuellen Task zu wechseln und zu seiner eigenen Task zu wechseln. In diesem Fall sollten alle diese Aktivitäten aus der ursprünglichen Aufgabe entfernt werden, wenn der Benutzer sich in andere Aktivitäten der zweiten Anwendung bewegt hat. 

Beachten Sie, dass Sie mit dieser Ausführung keine Ergebnisse für die vorherige Aktivität liefern können. Wenn Sie dies versuchen, wird eine Ausnahme ausgelöst.


Seit api 21 können Sie einen sehr ähnlichen Befehl verwenden

finishAndRemoveTask();

Beendet alle Aktivitäten in dieser Aufgabe und entfernt sie aus der Liste der letzten Aufgaben.

Alternativen:

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);

Quelle: So beenden Sie die Android-Anwendung programmgesteuert


Ich hoffe es hilft! Viel Glück!

7
Android.os.Process.killProcess(Android.os.Process.myPid());
5
kathir

Wie wäre es mit this.finishAffinity()

Aus den Dokumenten,

Beenden Sie diese Aktivität sowie alle unmittelbar darunter liegenden Aktivitäten in der aktuellen Task, die die gleiche Affinität aufweisen. Dies wird normalerweise verwendet, wenn eine Anwendung mit einer anderen Task gestartet werden kann (z. B. von einem ACTION_VIEW eines Inhaltstyps, den sie versteht) und der Benutzer die Aufwärtsnavigation verwendet hat, um von der aktuellen Task zur eigenen Task zu wechseln. Wenn der Benutzer in andere Aktivitäten der zweiten Anwendung nach unten gefahren ist, sollten alle diese als Teil des Taskwechsels aus der ursprünglichen Task entfernt werden. Beachten Sie, dass Sie mit dieser Ausführung keine Ergebnisse für die vorherige Aktivität liefern können. Wenn Sie dies versuchen, wird eine Ausnahme ausgelöst.

4
Akeshwar Jha

Verwenden Sie this.finishAffinity (); auf dieser Schaltfläche anstelle von finish (); Wenn es nicht funktioniert, können Sie auch versuchen, Android hinzuzufügen: noHistory = "true" in Ihrem Manifest und beenden Sie dann Ihre Aktivität mit uisng finish (); oder finishAffinity ();

Ich hoffe es hilft....:)

3
Yesha Shah
 @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);
    }
3
azeem khan

Versuchen Sie dies bei einem Anruf. Ich benutze es manchmal in einem Klick auf eine Schaltfläche.

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

Anstatt Ihre App zu schließen, wird das Dashboard geöffnet, so dass Ihre App geschlossen wird.

lesen Sie diese Frage für mehr Klarheit Android - Anwendungscode beenden

2

In Xamarin.Android erreichen:

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

dadurch wird Task (Stapel von Aktivitäten) gelöscht und mit der neuen Task begonnen 

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);
2
Mahmood Ali

Es funktioniert nur mit moveTaskToBack(true);

1
user3856297

fügen Sie dieses in Ihr onClic ein:

moveTaskToBack(true);
    finish()
1
Stan Malcolm

ghost-Aktivität, die mit singletop und finish () von onCreate aufgerufen wird, sollte den Trick ausführen

1
JesusS

Wenn sich noch jemand wundert, für Xamarin.Android (in meinem Fall läuft auch Monogame) läuft der Befehl FinishAndRemoveTask() auf Activity sehr gut!

0
Konrad

Anstelle von System.exit (1) Verwenden Sie einfach System.exit (0). 

0
Kaze Tdr

Wenn Sie sowohl Beenden als auch Beenden verwenden, wird Ihre App vollständig geschlossen 

fertig();

System.exit (0);

0

verwenden Sie einfach den Code in Ihrem Backpress

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

Wenn Sie in Ihrer Anwendung EventBus (oder eigentlich eine andere Pub-/Unterbibliothek) zur Kommunikation zwischen Aktivitäten verwenden, können Sie ihnen ein explizites Ereignis senden:

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

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

Der einzige Nachteil ist, dass Sie alle Aktivitäten benötigen, um sich dieses Ereignis anzuhören und ihre eigene finish() zu nennen. Zu diesem Zweck können Sie auf einfache Weise shim - Aktivitätsklassen durch Vererbung erstellen, die nur dieses Ereignis abhören und Unterklassen alles andere implementieren lassen und dann sicherstellen, dass alle Ihre Aktivitäten von dieser zusätzlichen Ebene erben. Die Kill-Listener könnten durch Überschreibungen sogar zusätzliche Funktionen hinzufügen, z. B. den Tod in bestimmten Situationen vermeiden.

im fragment

getActivity (). finishAndRemoveTask ();

in der Aktivität

finishAndRemoveTask ();

0
Just call these two Function

 finish();
 moveTaskToBack(true);
0
younes

füge einfach diesen Code hinzu: -

@Override
    public void onBackPressed() {
        finish();
        super.onBackPressed();
    }
0
Sandeep Malik

Führen Sie einfach die beiden unteren Zeilen aus, wenn Sie die Anwendung beenden möchten

Android.os.Process.killProcess(Android.os.Process.myPid());
System.exit(1);
0
Hassnain Jamil