Saya memiliki beberapa kegiatan dalam aplikasi saya. dan mengalir sangat rumit. Ketika saya mengklik aplikasi Logout menavigasi ke Layar login dan dari sana pengguna dapat keluar dengan tombol batal (menelepon system.exit(0)
)
ketika saya keluar atau kembali tombol, sistem memanggil suatu kegiatan dari tumpukan :( bagaimana saya bisa menghapus semua kegiatan di tumpukan ketika saya mencapai layar Login? Panggilan finish()
tidak praktis karena ada begitu banyak kegiatan dan beberapa kegiatan tidak boleh ditutup ketika mereka aktif seperti aktivitas memohon kamera asli.
validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);
android
android-activity
stack
Jay Mayu
sumber
sumber
Jawaban:
Sebagian besar dari Anda salah. Jika Anda ingin menutup tumpukan aktivitas yang ada terlepas dari apa yang ada di sana dan membuat root baru, set flag yang benar adalah sebagai berikut:
Dari dokumen :
sumber
IntentCompat.makeRestartActivityTask
dari pustaka dukungan.Saat Anda memanggil
startActivity
aktivitas terakhir yang selalu bisa Anda gunakansebagai bendera pada niat itu.
Baca lebih lanjut tentang bendera di sini .
sumber
Berikut adalah metode pembantu sederhana untuk memulai aktivitas baru sebagai aktivitas teratas baru yang bekerja dari API level 4 hingga versi 17 saat ini:
sebut saja seperti ini dari aktivitas Anda saat ini:
sumber
Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB
hal lain yangintent.addFlags(0x8000);
tidak akan pernah ditambahkanKosongkan Aktivitas Kembali dengan kode di bawah ini:
Selesai
sumber
Dalam kasus saya, LoginActivity juga ditutup. Hasil dari,
tidak membantu.
Namun, pengaturan
membantuku.
sumber
sumber
this.finish()
dansetFlags()
juga untuk menghapus aktivitas saat ini?Saya mencatat bahwa Anda meminta solusi yang tidak bergantung
finish()
, tetapi saya ingin tahu apakah ini dapat membantu.Saya melacak apakah flag keluar dinaikkan dengan variabel kelas statis, yang bertahan seumur hidup seluruh aplikasi. Di setiap kegiatan yang relevan
onResume()
, gunakanKelas ExitHelper
Katakanlah di mainActivity, pengguna menekan tombol untuk keluar - Anda dapat mengatur
ExitHelper.isExitFlagRaised = true;
dan kemudianfinish()
. Setelah itu, kegiatan terkait lainnya yang dilanjutkan secara otomatis akan selesai juga.sumber
Keputusan ini berfungsi dengan baik:
Tetapi aktivitas baru berjalan lama dan Anda melihat layar putih beberapa saat. Jika ini penting maka gunakan solusi ini:
Bagaimana cara menggunakannya:
Kekurangan: semua aktivitas yang harus ditutup pada stack harus memperluas BaseActivity
sumber
Untuk Pengembang Xamarin, Anda dapat menggunakan:
sumber
Menggunakan Kotlin:
Anda dapat mengatur bendera secara langsung menggunakan metode setter. Di Kotlin
or
adalah pengganti untuk bitwise Java atau|
.Jika Anda berencana untuk menggunakan ini secara teratur, buat fungsi ekstensi Intent
Anda kemudian dapat langsung memanggil fungsi ini sebelum memulai niat
sumber