Aplikasi saya memiliki layar alur berikut:
Home->screen 1->screen 2->screen 3->screen 4->screen 5
Sekarang saya memiliki log out
tombol umum di setiap layar
( Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5
)
Saya ingin bahwa ketika pengguna mengklik tombol logout (dari layar apa saja), semua layar akan selesai dan layar baru Log in
akan terbuka.
Saya telah mencoba hampir semua FLAG_ACTIVITY
untuk mencapai ini. Saya juga melewati beberapa jawaban di stackoverflow, tetapi tidak bisa menyelesaikan masalah. Aplikasi saya ada di Android 1.6 jadi tidak bisa digunakanFLAG_ACTIVITY_CLEAR_TASK
Apakah ada cara untuk menyelesaikan masalah ini?
Jawaban:
Menggunakan:
Ini akan menghapus semua kegiatan di atas rumah.
Dengan asumsi Anda menyelesaikan layar login ketika pengguna login dan home dibuat dan setelah itu semua layar dari 1 hingga 5 di atas yang itu. Kode yang saya poskan akan mengembalikan Anda ke layar beranda menyelesaikan semua aktivitas lainnya. Anda dapat menambahkan ekstra di maksud dan membacanya di aktivitas layar beranda dan menyelesaikannya juga (mungkin meluncurkan layar login lagi dari sana atau sesuatu).
Saya tidak yakin tetapi Anda juga dapat mencoba masuk dengan bendera ini. Saya tidak tahu bagaimana kegiatan akan dipesan dalam kasus itu. Jadi tidak tahu apakah itu akan menghapus yang ada di bawah layar yang Anda aktifkan termasuk yang sedang Anda gunakan tetapi pasti cara yang harus dilakukan.
Semoga ini membantu.
sumber
singleInstance
, pertimbangkan menggunakanFLAG_ACTIVITY_CLEAR_TOP|FLAG_ACTIVITY_SINGLE_TOP
sebagai bendera untuk Intent. Ini akan menyelesaikan aktivitas intervensi dan memulai (atau membawa kembali ke latar depan) aktivitas yang diinginkan.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
aktivitas saya tidak membantu saya. Itu tidak menyelesaikan kegiatan intervensi. Ketika saya menekan kembali dari layar Login saya bisa melihat kegiatan sebelumnya. Berikut adalah kode sayaIntent intent=new Intent(BaseActivity.this, Login.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);startActivity(intent);
.Anda boleh mencoba
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
. Ini akan benar-benar menghapus semua aktivitas sebelumnya dan memulai aktivitas baru.sumber
Sebelum meluncurkan Aktivitas baru Anda, cukup tambahkan kode berikut:
Atau jika Anda ingin berfungsi di Android versi sebelumnya:
sumber
Ketika pengguna ingin keluar dari semua aktivitas terbuka , mereka harus menekan tombol yang memuat Aktivitas pertama yang berjalan saat aplikasi Anda mulai, menghapus semua aktivitas lain, lalu menyelesaikan sisa aktivitas yang terakhir. Biarkan kode berikut dijalankan ketika pengguna menekan tombol keluar. Dalam kasus saya,
LoginActivity
adalah aktivitas pertama dalam program saya untuk dijalankan.Kode di atas menghapus semua aktivitas kecuali untuk
LoginActivity
. Kemudian masukkan kode berikut ke dalamLoginActivity
'sonCreate(...)
, untuk mendengarkan kapanLoginActivity
diciptakan kembali dan sinyal' EXIT 'berlalu:Mengapa membuat tombol keluar di Android begitu sulit?
Android berusaha keras untuk mencegah Anda memiliki tombol "keluar" di aplikasi Anda, karena mereka ingin pengguna tidak pernah peduli apakah program yang mereka gunakan berjalan di latar belakang atau tidak.
Pengembang OS Android ingin agar program Anda dapat bertahan dari pematian yang tidak terduga dan matikan telepon, dan ketika pengguna memulai kembali program, mereka mengambil tepat di mana mereka tinggalkan. Jadi pengguna dapat menerima panggilan telepon saat mereka menggunakan aplikasi Anda, dan membuka peta yang mengharuskan aplikasi Anda dibebaskan untuk sumber daya yang lebih banyak.
Ketika pengguna melanjutkan aplikasi Anda, mereka mengambil tepat di mana mereka tinggalkan tanpa gangguan. Tombol keluar ini mengambil daya dari pengelola aktivitas, yang berpotensi menyebabkan masalah dengan siklus hidup program android yang dikelola secara otomatis.
sumber
Ini akan bekerja untuk semua versi Android. Di mana
IntentCompat
kelas ditambahkan di pustaka Dukungan Android.sumber
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK
tidak dikenali, gunakanIntent
sebagai gantiIntentCompat
.Gunakan yang berikut untuk aktivitas
hapus bendera CLEAR_TASK untuk penggunaan fragmen.
Saya harap ini dapat digunakan untuk beberapa orang.
sumber
Saya kira saya terlambat tetapi ada jawaban yang sederhana dan singkat. Ada metode finishAffinity () di Aktivitas yang akan menyelesaikan aktivitas saat ini dan semua aktivitas induk, tetapi hanya berfungsi di Android 4.1 atau lebih tinggi.
Untuk API 16+, gunakan
finishAffinity();
Untuk di bawah 16, gunakan
ActivityCompat.finishAffinity(YourActivity.this);
Semoga ini bisa membantu!
sumber
Dari developer.android.com :
Selesaikan aktivitas ini dan juga semua aktivitas tepat di bawahnya dalam tugas saat ini yang memiliki afinitas yang sama. Ini biasanya digunakan ketika aplikasi dapat diluncurkan ke tugas lain (seperti dari ACTION_VIEW jenis konten yang dimengerti) dan pengguna telah menggunakan navigasi atas untuk beralih dari tugas saat ini dan ke tugasnya sendiri. Dalam hal ini, jika pengguna telah menavigasi ke aktivitas lain dari aplikasi kedua, semua itu harus dihapus dari tugas asli sebagai bagian dari pengalih tugas.
Perhatikan bahwa penyelesaian ini tidak memungkinkan Anda untuk memberikan hasil ke aktivitas sebelumnya, dan pengecualian akan dilemparkan jika Anda mencoba melakukannya.
sumber
Di samping catatan, baik untuk mengetahui
Jawaban ini berfungsi ( https://stackoverflow.com/a/13468685/7034327 )
padahal ini tidak berhasil
.setFlags()
mengganti semua flag sebelumnya dan tidak menambahkan flag baru apa.addFlags()
pun.Jadi ini juga akan berhasil
sumber
Jika aplikasi Anda memiliki minimum sdk versi 16 maka Anda dapat menggunakan finishAffinity ()
Selesaikan aktivitas ini dan juga semua aktivitas tepat di bawahnya dalam tugas saat ini yang memiliki afinitas yang sama.
Ini berfungsi untuk saya. Di layar Pembayaran Top, hapus semua aktivitas back-stack,
http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29
sumber
Solusi yang saya terapkan untuk ini (saya pikir saya menemukannya di Stack Overflow di suatu tempat, tapi saya tidak ingat, jadi terima kasih kepada siapa pun yang melakukan itu di tempat pertama):
Dari aktivitas Anda lakukan ini:
Kemudian di LoginActivity Anda, timpa onKeyDown:
sumber
Untuk tombol logout di layar terakhir aplikasi, gunakan kode ini pada pendengar tombol logout untuk menyelesaikan semua aktivitas terbuka sebelumnya, dan masalah Anda terpecahkan.
sumber
sumber
setFlags
akan mengganti semua sebelumnya, jadi yang terakhirsetFlags
hanya valid, yang sebelumnya diganti. Jadi, Anda tidak perlu meneleponi1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
saya memiliki masalah yang sama yang dapat Anda gunakan
IntentCompat
, seperti ini:kode ini berfungsi untuk saya.
Android api 17
sumber
Dalam kasus saya, saya menggunakan
finishAffinity()
fungsi dalam aktivitas terakhir seperti:Semoga bermanfaat.
sumber
alih-alih menggunakan
finish()
gunakan sajafinishAffinity();
sumber
Masuk -> Home-> layar 1-> layar 2-> layar 3-> layar 4-> layar 5
di layar 4 (atau yang lain) ->
dengansumber
untuk API> = 15 hingga API 23 solusi sederhana.
sumber
Jika Anda menggunakan
startActivityForResult()
dalam aktivitas Anda sebelumnya, cukup timpaOnActivityResult()
dan panggilfinish();
metode di dalamnya dalam semua aktivitas .. Ini akan melakukan pekerjaan ...sumber
startActivity
hanya menggunakan .onActivityResult
setiap kegiatan. Saya telah menerapkan saran DArkO dan mencapai tujuan saya dan terima kasih atas bantuannya.Ketika pengguna mengklik tombol logout lalu tulis kode berikut:
Dan juga ketika setelah login jika Anda menelepon aktivitas baru jangan gunakan finish ();
sumber
Cukup, ketika Anda pergi dari layar login, bukan saat menyelesaikan layar login.
Dan kemudian dalam semua aktivitas maju, gunakan ini untuk logout:
Ini bekerja dengan sempurna.
sumber
Jika Anda masuk pengguna
screen 1
dan dari sana Anda pergi ke layar lain, gunakansumber
onKeyDown
danonBackPressed
(atauonKeyDown
, jika Anda ingin mendukung versi Android <2.0) di masing-masing kegiatan Anda (kecuali yang masuk), dan distartActivity(login)
sana seperti yang ditunjukkan di atas.Saya menemukan cara ini, itu akan menghapus semua riwayat dan keluar
sumber
Saya kira saya terlambat tetapi ada jawaban yang sederhana dan singkat. Ada metode finishAffinity () di Aktivitas yang akan menyelesaikan aktivitas saat ini dan semua aktivitas induk, tetapi hanya berfungsi di Android 4.1 atau lebih tinggi.
Untuk API 16+, gunakan
finishAffinity ();
Untuk di bawah 16, gunakan
ActivityCompat.finishAffinity (YourActivity.this);
Semoga ini bisa membantu!
shareedit menjawab 27 Mei 18 pada 8:03
Akshay Taru
sumber
Saya menemukan solusi ini berfungsi di setiap perangkat meskipun tingkat API (bahkan untuk <11)
sumber
Cara terbaik untuk menutup semua aktivitas sebelumnya dan menghapus memori
sumber
sumber