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?

Jus lemon
sumber
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); 
Fayaz
sumber
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);

                }
            });
Anchit Mittal
sumber
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!

Kharbanda Shreshth
sumber
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);
}
Pir Fahim Shah
sumber
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();
    }
Sai Aditya
sumber
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
17

Itu terlalu mudah. MenggunakanSystem.exit(0);

Amon Olimov
sumber
2
Hahahah. Tidak terlalu mudah
TheRealChx101
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());
Kasun
sumber
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.

Akeshwar Jha
sumber
6
android.os.Process.killProcess(android.os.Process.myPid());
kathir
sumber
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);
Mahmood Ali
sumber
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);
    }
azeem khan
sumber
2

masukkan yang ini ke onClic Anda:

moveTaskToBack(true);
    finish()
Stan Malcolm
sumber
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

Rishiraj Purohit
sumber
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 .... :)

Yesha Shah
sumber
2

Mencapai di Xamarin.Android:

    public override void OnBackPressed()
    {
        MoveTaskToBack(true);
        Process.KillProcess(Process.MyPid());
        Environment.Exit(1);
    }
GONeale
sumber
Apakah ini referensi ke System.Environment.Exit atau Android.OS.Environment.Exit?
Moffen
2

Panggil saja kedua fungsi ini

 finish();
 moveTaskToBack(true);
younes
sumber
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.

Abdul Kadir
sumber
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

Yesus
sumber
1

Ini bekerja hanya dengan menggunakan moveTaskToBack(true);

pengguna3856297
sumber
1

Alih-alih System.exit (1) Cukup gunakan System.exit (0)

Kaze Tdr
sumber
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!

Konrad
sumber
1

dalam fragmen

getActivity (). finishAndRemoveTask ();

dalam Aktivitas

finishAndRemoveTask ();

Rodrigo Givisiez
sumber
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);
Sayooj
sumber
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.

Grzegorz Adam Hankiewicz
sumber
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);
Hassnain Jamil
sumber
0
finish();
 finishAffinity();
 System.exit(0);

bekerja untuk saya

prabhu
sumber
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();
Muhammad Naveed
sumber
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();
        }
    }
Sihat Afnan
sumber
-1

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

selesai();

System.exit (0);

Abdullah alkış
sumber