Bagaimana cara keluar dari aplikasi Android secara terprogram?


93

Saya yakin pertanyaan ini telah diajukan berkali-kali karena saya membaca sedikit. Klien saya ingin saya memasukkan tombol ke aplikasinya tempat pengguna dapat mengeklik dan keluar. Saya telah membaca ini dan menemukan panggilan finish()akan melakukannya. Namun, finish hanya menutup aktivitas yang sedang berjalan, bukan? Saya memiliki banyak aktivitas sehingga dalam hal ini saya harus melewatkan setiap instance aktivitas dan menyelesaikannya atau membuat setiap aktivitas menjadi pola Singleton.

Saya juga harus tahu Activity.moveTaskToBack(true)bisa membawa Anda ke layar beranda. Oke, ini bukan menutup tetapi melatarbelakangi proses. Jadi apakah ini efektif?

Metode mana yang harus saya gunakan untuk menutup aplikasi sepenuhnya? Salah satu dari yang dijelaskan di atas atau metode lain / penggunaan lain dari metode di atas?


mengapa tidak menggunakan bilah tindakan. klik pada ikon aplikasi arahkan ke layar beranda. klik tombol kembali untuk keluar
Raghunandan

@Raghunandan: Seperti yang saya sebutkan, persyaratan klien :(
Jus Lemon

Periksa apakah ini membantu android.os.Process.killProcess (android.os.Process.myPid ());
SANorton Stanley


Jawaban:


71

Sebenarnya setiap orang mencari untuk menutup aplikasi di acara onclick, di mana pun mungkin aktivitas ....

Jadi teman teman coba kode ini. Letakkan kode ini di acara onclick

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

8
Ini sebenarnya tidak "menutup aplikasi sepenuhnya" seperti yang diminta PeakGen karena aplikasi masih berjalan tetapi ini adalah alternatif yang bagus
La masse

2
Saya rasa tidak, jika suatu kegiatan dimulai dengan BENDERA AKTIVITAS TUGAS BARU , cara ini tidak dapat keluar
fozua

51

Anda dapat memanggil System.exit (); untuk keluar dari semua aktivitas.

    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
Itu baru saja membawa saya ke aktivitas pertama
Jus Lemon

8
@AnchitMittal System.exit (1) tidak akan menjamin penyetelan ulang tumpukan Aktivitas atau tugas (lihat developer.android.com/guide/components/… ). Oleh karena itu, pendekatan ini tidak menjamin pematian aplikasi yang benar (menghancurkan semua Aktivitas) pada waktunya.
IgorGanapolsky

Tidak semua aktivitas keluar.
Jitendra

49

Metode finishAffinity, dirilis di API 16, menutup semua aktivitas yang sedang berlangsung dan menutup aplikasi:

this.finishAffinity();

Selesaikan aktivitas ini serta semua aktivitas tepat di bawahnya dalam tugas saat ini yang memiliki afinitas yang sama. Ini biasanya digunakan saat aplikasi bisa diluncurkan ke tugas lain (seperti dari ACTION_VIEW dari tipe konten yang dipahami) dan pengguna telah menggunakan navigasi atas untuk beralih dari tugas saat ini dan ke tugasnya sendiri. Dalam kasus ini, jika pengguna telah menavigasi ke aktivitas lain dari aplikasi kedua, semua itu harus dihapus dari tugas awal sebagai bagian dari sakelar tugas.

Perhatikan bahwa penyelesaian ini tidak memungkinkan Anda mengirimkan hasil ke aktivitas sebelumnya, dan pengecualian akan diberikan jika Anda mencoba melakukannya.


Sejak API 21, Anda dapat menggunakan:

finishAndRemoveTask();

Menyelesaikan semua aktivitas dalam tugas ini dan menghapusnya dari daftar tugas terbaru.

Alternatif:

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

Sumber: Cara keluar dari aplikasi android secara terprogram


Semoga membantu! Semoga berhasil!


2
Jangan gunakan System.exit (). Android akan mencoba memulai ulang aplikasi setelah keluar. Anda bisa berakhir dalam satu lingkaran.
AndroidDev

42

Jika Anda ingin keluar dari aplikasi Anda, gunakan kode ini di dalam acara penekanan tombol Anda:

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
Apa perbedaan antara System.exit (1); dan System.exit (0);
Pyae Phyo

System.exit (1) berarti aplikasi selesai dengan beberapa kesalahan, sedangkan System.exit (0) berarti aplikasi selesai tanpa kesalahan. Ini adalah cara berbagai perintah linux / unix mengembalikan kondisi (kesalahan) saat keluar.
iOS-Coder


13

Ada dua kemungkinan situasi:

  1. Anda mungkin ingin keluar dari aktivitas
  2. Atau Anda ingin keluar dari aplikasi

Anda dapat keluar dari aktivitas menggunakan kode berikut:

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

Tapi ini tidak akan mematikan aktivitas yang mendasari dalam aplikasi yang sama. Ini hanya akan meminimalkan aplikasi.

Jika Anda ingin keluar dari aplikasi gunakan kode berikut untuk mengakhiri prosesnya:

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

untuk pengembangan mono gunakan saja

process.KillProcess(Process.MyPid());

Mypid () adalah metode Anda atau apa ... jadi bagaimana Anda menulis Mypid ... Anda harus menulis dengan metode .....
Amitsharma

@amitsharma MyPid () adalah metode dari kelas Proses, yang Mengembalikan pengidentifikasi dari proses ini, yang dapat digunakan dengan killProcess (int) dan sendSignal (int, int)
Kasun

Apakah itu akan menghentikan layanan latar belakang dan penerima siaran juga atau hanya akan menutup aplikasi dengan aman?
Usman Rana

jadi, apa perbedaan antara android.os.Process.killProcess(android.os.Process.myPid()); dan process.KillProcess(Process.MyPid());?
DysaniazzZ

7

Bagaimana tentang this.finishAffinity()

Dari dokumen,

Selesaikan aktivitas ini serta semua aktivitas tepat di bawahnya dalam tugas saat ini yang memiliki afinitas yang sama. Ini biasanya digunakan saat aplikasi bisa diluncurkan ke tugas lain (seperti dari ACTION_VIEW dari tipe konten yang dipahami) dan pengguna telah menggunakan navigasi atas untuk beralih dari tugas saat ini dan ke tugasnya sendiri. Dalam kasus ini, jika pengguna telah menavigasi ke aktivitas lain dari aplikasi kedua, semua itu harus dihapus dari tugas awal sebagai bagian dari sakelar tugas. Perhatikan bahwa penyelesaian ini tidak memungkinkan Anda mengirimkan hasil ke aktivitas sebelumnya, dan pengecualian akan diberikan jika Anda mencoba melakukannya.


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

Untuk kasus saya, ini menyelamatkan hidup saya. Terima kasih!
Lifka

4

ini akan menghapus Tugas (tumpukan aktivitas) dan memulai Tugas baru

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

Jelaskan mengapa Anda memposting kode ini sebagai jawaban dan apa fungsinya juga.
M. Adeel Khalid

1
Selamat datang di Stack Overflow! Meskipun Anda mungkin telah memecahkan masalah pengguna ini, jawaban hanya-kode tidak terlalu membantu pengguna yang datang ke pertanyaan ini di masa mendatang. Harap edit jawaban Anda untuk menjelaskan mengapa kode Anda menyelesaikan masalah asli.
Joe C

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

masukkan yang ini ke onClic Anda:

moveTaskToBack(true);
    finish()

apa yang salah dengan suara negatif. Inilah jawabannya. Saya mendapat 2 aktivitas, pertama adalah aktivitas masuk dan aktivitas kedua adalah aktivitas utama .... saya ingin keluar dari aplikasi dalam aktivitas utama dan tidak ingin kembali ke aktivitas masuk ... saya memasukkan jawaban ini, dan sekarang saya dapat menutup aplikasi dalam aktivitas utama.
Azizi Musa

jika Anda melakukan ini, aplikasi akan tetap berjalan di latar belakang
Mohanad Haddadin

Bekerja dengan baik. Kasus saya adalah: splashActivity menjalankan MainActivity. Ketika pengguna menekan kembali aplikasi MainActivity keluar seperti yang diharapkan. Semua kasus lainnya membuat saya kembali ke aktivitas percikan!
Jviaches

Nah, Anda seharusnya menyelesaikan aktivitas login segera setelah login selesai :) Dan jawabannya tentu saja tidak sepenuhnya benar , movewTaskToBacktidak menyelesaikan apa-apa, hanya menyembunyikan aplikasi, dan finishseperti yang disebutkan oleh orang lain hanya menyelesaikan yang sekarang activity. Jadi itu menghentikan aktivitas saat ini dan menyembunyikan sisanya, jika ada. Pokoknya seharusnya tidak mendapatkan suara bawah hanya untuk ini ...
Meong Cat 2012

2

Coba ini saat menelepon. Saya terkadang menggunakannya di onClick dari sebuah tombol.

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

Alih-alih menutup aplikasi Anda, itu membuka dasbor sehingga sepertinya aplikasi Anda ditutup.

baca pertanyaan ini untuk lebih jelasnya android - kode aplikasi keluar


2

Gunakan this.finishAffinity (); pada tombol itu alih-alih finish (); Jika tidak berhasil, Anda juga bisa mencoba dengan menambahkan android: noHistory = "true" dalam manifes Anda lalu selesaikan aktivitas Anda dengan uisng finish (); atau finishAffinity ();

Semoga membantu .... :)


2

Mencapai di Xamarin.Android:

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

Apakah ini referensi ke System.Environment.Exit atau Android.OS.Environment.Exit?
Moffen

2

Panggil saja kedua fungsi ini

 finish();
 moveTaskToBack(true);

Jawaban Anda datang dalam posting berkualitas lebih rendah. Harap berikan beberapa penjelasan meskipun kode Anda cukup jelas.
Harsha Biyani

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

Gunakan Kode ini, itu sangat berguna, dan Anda dapat keluar dari semua aktivitas.


Saya melakukan ini, dan kemudian melempar telepon dari lantai 5, semua aktivitas ditutup thanx
Paschalis

1

aktivitas hantu yang dipanggil dengan singletop dan finish () di onCreate seharusnya berhasil




1

Jika seseorang masih bertanya-tanya, untuk Xamarin.Android (dalam kasus saya juga Monogame berjalan di atasnya) perintah FinishAndRemoveTask()di Activitymelakukan pekerjaan dengan sangat baik!


1

dalam fragmen

getActivity (). finishAndRemoveTask ();

dalam Aktivitas

finishAndRemoveTask ();


0

cukup gunakan kode di backpress Anda

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

0

Jika Anda menggunakan EventBus (atau pub / sub library lainnya) di aplikasi Anda untuk berkomunikasi di antara aktivitas, Anda dapat mengirimi mereka acara eksplisit:

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

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

Satu-satunya downside ini adalah Anda membutuhkan semua aktivitas untuk mendengarkan acara ini untuk memanggil mereka sendiri finish(). Untuk ini, Anda dapat dengan mudah membuat kelas aktivitas shim melalui pewarisan yang hanya mendengarkan kejadian ini dan membiarkan subkelas mengimplementasikan yang lainnya, lalu memastikan semua aktivitas Anda mewarisi dari lapisan tambahan ini. Pendengar pembunuh bahkan dapat menambahkan beberapa fungsi tambahan melalui penggantian, seperti menghindari kematian pada situasi tertentu.


0

Jalankan saja dua baris di bawah ini saat Anda ingin keluar dari aplikasi

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

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

bekerja untuk saya


1
Harap tambahkan beberapa penjelasan ke kode Anda. Selain itu, sepertinya jawaban lain sudah mencakup itu - jadi Anda juga harus menjelaskan apa yang membuat solusi Anda lebih baik daripada yang lain
Nico Haase

0

Panggil saja ini:

finishAffinity();

Meskipun kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan tersebut meningkatkan nilai jangka panjangnya.
Igor F.

0

Tautkan metode ini ke tombol keluar / keluar Anda

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

-1

Jika Anda menggunakan keduanya, selesai dan keluar, aplikasi Anda akan ditutup dengan sempurna

selesai();

System.exit (0);

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.