Saya ingin menutup aplikasi saya, sehingga tidak lagi berjalan di latar belakang.
Bagaimana cara melakukannya? Apakah ini praktik yang baik di platform Android?
Jika saya mengandalkan tombol "kembali", itu menutup aplikasi, tetapi tetap di latar belakang. Bahkan ada aplikasi bernama "TaskKiller" hanya untuk mematikan aplikasi tersebut di latar belakang.
Jawaban:
Android memiliki mekanisme untuk menutup aplikasi dengan aman sesuai dokumentasinya. Di Aktivitas terakhir yang keluar (biasanya Aktivitas utama yang pertama kali muncul ketika aplikasi dimulai) cukup tempatkan beberapa baris dalam metode onDestroy (). Panggilan ke System.runFinalizersOnExit (true) memastikan bahwa semua objek akan selesai dan sampah dikumpulkan ketika aplikasi keluar. Anda juga dapat mematikan aplikasi dengan cepat melalui android.os.Process.killProcess (android.os.Process.myPid ()) jika diinginkan. Cara terbaik untuk melakukan ini adalah meletakkan metode seperti berikut di kelas pembantu dan kemudian menyebutnya kapan pun aplikasi perlu dibunuh. Misalnya dalam metode hancurkan aktivitas root (dengan anggapan bahwa aplikasi tidak pernah membunuh aktivitas ini):
Android juga tidak akan memberi tahu aplikasi acara tombol HOME , jadi Anda tidak bisa menutup aplikasi saat tombol HOME ditekan. Android menyimpan peristiwa utama HOME untuk dirinya sendiri sehingga pengembang tidak dapat mencegah pengguna meninggalkan aplikasi mereka. Namun Anda dapat menentukan dengan tombol HOME ditekan dengan mengatur flag ke true dalam kelas helper yang mengasumsikan bahwa tombol HOME telah ditekan, kemudian mengubah flag ke false ketika suatu peristiwa terjadi yang menunjukkan bahwa tombol HOME tidak ditekan lalu memeriksa untuk melihat tombol HOME yang ditekan pada metode aktivitas onStop () .
Jangan lupa untuk menangani tombol HOME untuk menu apa pun dan dalam aktivitas yang dimulai oleh menu. Hal yang sama berlaku untuk kunci PENCARIAN . Di bawah ini adalah beberapa contoh kelas untuk diilustrasikan:
Berikut adalah contoh aktivitas root yang membunuh aplikasi saat dihancurkan:
Berikut adalah aktivitas abstrak yang dapat diperluas untuk menangani kunci HOME untuk semua aktivitas yang memperpanjangnya:
Berikut adalah contoh layar menu yang menangani tombol HOME :
Berikut adalah contoh kelas pembantu yang menangani kunci HOME di seluruh aplikasi:
sumber
killApp()
, karena Google telah mengindikasikan bahwa itu akan menyebabkan perilaku yang tidak dapat diprediksi.IYA! Anda tentu saja dapat menutup aplikasi Anda sehingga tidak lagi berjalan di latar belakang. Seperti yang dikomentari oleh orang lain
finish()
adalah cara yang disarankan Google itu tidak berarti program Anda ditutup.Itu di sana akan menutup aplikasi Anda tanpa meninggalkan apa pun yang berjalan di latar belakang. Namun, gunakan ini dengan bijak dan jangan biarkan file terbuka, database menangani terbuka, dll. Hal-hal ini biasanya akan dibersihkan melalui
finish()
perintah.Saya pribadi BENCI ketika saya memilih Keluar di suatu aplikasi dan itu tidak benar-benar keluar.
sumber
Inilah cara saya melakukannya:
Saya hanya menempatkan
di dalam metode yang membuka aktivitas, lalu di dalam metode SOMECLASSNAME yang dirancang untuk menutup aplikasi yang saya masukkan:
Dan saya menempatkan yang berikut di kelas Utama saya:
sumber
Hanya untuk menjawab pertanyaan saya sendiri sekarang setelah sekian lama (karena CommonsWare mengomentari jawaban paling populer yang mengatakan kita TIDAK boleh melakukan ini):
Ketika saya ingin keluar dari aplikasi:
FLAG_ACTIVITY_CLEAR_TOP
(yang akan keluar dari semua aktivitas lain yang dimulai setelahnya, yang berarti - semuanya). Jadikan saja aktivitas ini ada di tumpukan aktivitas (jangan selesaikan karena alasan tertentu sebelumnya).finish()
kegiatan iniIni dia, bekerja cukup baik untuk saya.
sumber
Cukup tulis kode ini di klik tombol EXIT Anda.
Dan pada metode onCreate () dari MainActivity.class Anda, tulis kode di bawah ini sebagai baris pertama,
sumber
Tidak mungkin menggunakan kerangka API. Merupakan kebijaksanaan sistem operasi (Android) untuk memutuskan kapan suatu proses harus dihapus atau tetap dalam memori. Ini untuk alasan efisiensi: jika pengguna memutuskan untuk meluncurkan kembali aplikasi, maka aplikasi itu sudah ada di sana tanpa harus dimuat ke dalam memori.
Jadi tidak,
tidak hanyaberkecil hati, tidak mungkinmelakukannya.sumber
Untuk keluar dari cara aplikasi:
Cara 1:
panggil
finish();
dan timpaonDestroy();
. Masukkan kode berikutonDestroy()
:atau
Cara 2:
Cara 3:
Cara 4:
Cara 5:
Terkadang panggilan
finish()
hanya akan keluar dari aktivitas saat ini, bukan seluruh aplikasi. Namun, ada solusi untuk ini. Setiap kali Anda memulaiactivity
, mulai gunakanstartActivityForResult()
. Ketika Anda ingin menutup seluruh aplikasi, Anda dapat melakukan sesuatu seperti berikut ini:Kemudian tentukan
onActivityResult(...)
callback setiap aktivitas sehingga ketika sebuah nilaiactivity
dikembalikanRESULT_CLOSE_ALL
, ia juga memanggilfinish()
:sumber
Beginilah cara kerja Windows Mobile untuk ... yah ... pernah! Inilah yang dikatakan Microsoft tentang masalah ini:
http://blogs.msdn.com/windowsmobile/archive/2006/10/05/The-Emperor-Has-No-Close.aspx (apakah menyedihkan bahwa saya ingat judul posting blog sepanjang tahun 2006? Saya menemukan artikel di Google dengan mencari "kaisar tidak memiliki tutup" lol)
Pendeknya:
Banyak komentar dalam pertanyaan ini di O'Reilly menyarankan bahwa Android berperilaku dengan cara yang sama, menutup aplikasi yang belum pernah digunakan hanya ketika Android membutuhkan memori yang mereka gunakan.
Karena ini adalah fitur standar, maka mengubah perilaku untuk menutup paksa akan mengubah pengalaman pengguna. Banyak pengguna akan terbiasa dengan pemberhentian yang lembut dari aplikasi Android mereka sehingga ketika mereka mengabaikan satu dengan tujuan kembali ke sana setelah melakukan beberapa tugas lain, mereka mungkin agak frustrasi karena keadaan aplikasi diatur ulang, atau bahwa itu membutuhkan waktu lebih lama membuka. Saya akan tetap dengan perilaku standar karena itulah yang diharapkan.
sumber
Memanggil
finish()
metode pada Aktivitas memiliki efek yang Anda inginkan pada aktivitas saat ini.sumber
tidak satu pun dari semua jawaban di atas yang berfungsi baik di aplikasi saya
ini kode kerja saya
pada tombol keluar Anda:
kode itu adalah untuk menutup aktivitas lain dan membawa MainActivity di atas sekarang di MainActivity Anda:
sumber
Letakkan
finish();
pernyataan seperti di bawah ini:Di setiap aktivitas.
sumber
sumber
Salin kode di bawah ini dan tempel file AndroidManifest.xml di bawah Tag Aktivitas Pertama.
Juga Tambahkan kode di bawah ini di semua di bawah Tag Aktivitas di file AndroidManifest.xml
sumber
Tidak mungkin dengan 2.3. Saya mencari banyak, dan mencoba banyak aplikasi. Solusi terbaik adalah menginstal keduanya (go taskmanager) dan (fast reboot). Saat menggunakannya bersama-sama itu akan bekerja, dan akan membebaskan memori. Pilihan lain adalah meng-upgrade ke sandwich es krim Android 4.0.4 yang memungkinkan kontrol (tutup) aplikasi.
sumber
saya ingin kembali ke layar beranda perangkat android saya, jadi saya hanya menggunakan:
sumber
Penggunaan
finishAffinity()
mungkin merupakan opsi yang baik jika Anda ingin menutup semua Aktivitas aplikasi. Sesuai Android Documents-sumber
dan dalam manifes:
Kemudian Anda dapat menelepon
CloseAppActivity.closeApp(fromActivity)
dan aplikasi akan ditutup.sumber
Cukup tulis kode berikut di onBackPressed:
sumber
dengan memanggil finish (); di tombol OnClick atau pada menu
sumber
finish()
tidak mematikan Aplikasi. Mungkin kembali ke Intent sebelumnya atau latar belakang App.Saya pikir ini akan menutup aktivitas Anda dan semua Sub aktivitas yang terkait dengannya.
sumber
Cara terbaik dan terpendek untuk menggunakan tabel System.exit.
VM menghentikan eksekusi lebih lanjut dan program akan keluar.
sumber
Gunakan "
this.FinishAndRemoveTask();
" - itu menutup aplikasi dengan benarsumber