Aplikasi saya menunjukkan aktivitas pendaftaran saat pertama kali pengguna menjalankan aplikasi, terlihat seperti:
- ActivitySplashScreen (selamat datang di game, daftar untuk akun?)
- ActivitySplashScreenSignUp (hebat, isi info ini)
- ActivityGameMain (layar game utama)
sehingga aktivitas saling meluncurkan dengan urutan yang tepat, ketika pengguna mengklik tombol di setiap layar.
Ketika pengguna beralih dari aktivitas # 2 ke # 3, apakah mungkin untuk menghapus # 1 dan # 2 dari tumpukan sejarah sepenuhnya? Saya suka sehingga jika pengguna berada di # 3, dan menekan tombol kembali, mereka hanya pergi ke homescreen, alih-alih kembali ke layar splash.
Saya pikir saya bisa menyelesaikan ini dengan tugas-tugas (mis. Memulai tugas baru di # 3) tetapi ingin melihat apakah ada metode yang lebih sederhana,
Terima kasih
android
android-activity
activity-lifecycle
Menandai
sumber
sumber
Jawaban:
Anda dapat mencapai ini dengan mengatur
android:noHistory
atribut ke"true"
dalam<activity>
entri yang relevan diAndroidManifest.xml
file Anda . Sebagai contoh:sumber
FLAG_ACTIVITY_NO_HISTORY
.android:noHistory="true"
Anda dapat menggunakan penerusan untuk menghapus aktivitas sebelumnya dari tumpukan aktivitas sambil meluncurkan yang berikutnya. Ada contohnya di APIDEMOS , tetapi pada dasarnya semua yang Anda lakukan adalah menelepon
finish()
segera setelah meneleponstartActivity()
.sumber
FLAG_ACTIVITY_CLEAR_TOP
tidak akan berfungsi karena C belum ada di tumpukan belakang.Ya, lihatlah Intent.FLAG_ACTIVITY_NO_HISTORY .
sumber
android:noHistory="true"
di manifes.intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)
untuk mengatur bendera ini.Ini mungkin bukan cara yang ideal untuk melakukannya. Jika seseorang memiliki cara yang lebih baik, saya akan menantikan untuk menerapkannya. Inilah cara saya menyelesaikan tugas khusus ini dengan pra-versi-11 SDK.
di setiap kelas Anda ingin pergi ketika waktu yang cerah, Anda perlu melakukan ini:
maka yang perlu mematikan rantai muncul dari tumpukan perlu hanya memanggil ini ketika Anda ingin memulainya:
Maka kegiatan tidak di tumpukan!
Ingat orang-orang, bahwa Anda dapat memulai suatu kegiatan, dan kemudian mulai membersihkan di belakangnya, eksekusi tidak mengikuti satu utas (ui).
sumber
Salah satu cara yang berfungsi sebelum API 11 adalah memulai
ActivityGameMain
terlebih dahulu, lalu dionCreate
Aktivitas tersebut mulailahActivitySplashScreen
aktivitas Anda . TidakActivityGameMain
akan muncul saat Anda memanggil startActivity terlalu awal untuk splash.Kemudian Anda dapat menghapus tumpukan ketika memulai
ActivityGameMain
dengan mengatur bendera ini pada Intent:Anda juga harus menambahkan ini ke ActivitySplashScreen:
Sehingga menekan kembali aktivitas itu tidak kembali ke Anda
ActivityGameMain
.Saya berasumsi bahwa Anda tidak ingin layar splash kembali ke baik, untuk mencapai ini saya sarankan mengaturnya
noHistory
di AndaAndroidManifest.xml
. Kemudian masukkangoBackPressed
kode diActivitySplashScreenSignUp
kelas Anda sebagai gantinya.Namun saya telah menemukan beberapa cara untuk memecahkan ini. Mulai aplikasi lain dari pemberitahuan saat
ActivitySplashScreenSignUp
ditampilkan dan riwayat belakang tidak diatur ulang.Satu-satunya cara nyata untuk mengatasi hal ini adalah di API 11:
sumber
Saya menggunakan cara ini.
sumber
Saya tahu saya terlambat dalam hal ini (sudah dua tahun sejak pertanyaan diajukan) tetapi saya menyelesaikan ini dengan mencegat tombol kembali. Daripada memeriksa kegiatan tertentu, saya hanya melihat hitungan dan jika kurang dari 3 itu hanya mengirim aplikasi ke belakang (menjeda aplikasi dan mengembalikan pengguna ke apa pun yang sedang berjalan sebelum diluncurkan). Saya memeriksa kurang dari tiga karena saya hanya memiliki satu layar intro. Juga, saya memeriksa hitungan karena aplikasi saya memungkinkan pengguna untuk menavigasi kembali ke layar beranda melalui menu, jadi ini memungkinkan mereka untuk mencadangkan melalui layar lain seperti biasa jika ada kegiatan selain layar intro pada tumpukan.
sumber
Dalam manifes Anda dapat menambahkan:
Anda juga bisa menelepon
segera setelah menelepon startActivity (..)
sumber
Cukup atur
noHistory="true"
dalam file Manifest . Itu membuat aktivitas dihapus dari backstack.sumber
Sangat gila bahwa tidak ada yang menyebutkan solusi elegan ini. Ini harus menjadi jawaban yang diterima.
SplashActivity -> AuthActivity -> DashActivity
Kuncinya di sini adalah untuk digunakan
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
untuk perantaraActivity
. Setelah tautan tengah rusak,DashActivity
kemauan yang pertama dan terakhir di tumpukan.android:noHistory="true"
adalah solusi yang buruk, karena menyebabkan masalah ketika mengandalkanActivity
misalnya sebagai callbackonActivityResult
. Ini adalah solusi yang direkomendasikan dan harus diterima.sumber
Sudah terlambat tetapi harap ini membantu. Sebagian besar jawaban tidak menunjuk ke arah yang benar. Ada dua bendera sederhana untuk itu.
Dari Android docs:
sumber
Panggil saja ini. Finish () sebelum startActivity (maksud) seperti ini-
sumber
Menghapus aktivitas dari Riwayat dilakukan Dengan mengatur bendera sebelum aktivitas yang Tidak Anda inginkan
A-> B-> C-> D
Misalkan A, B, C dan D adalah 4 Kegiatan jika Anda ingin menghapus B dan C kemudian mengatur bendera
Dalam kegiatan A dan B
Ini adalah sedikit kode
sumber
sumber
Coba ini:
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)
itu API Level 1, periksa tautannya .
sumber
Intent.FLAG_ACTIVITY_NO_HISTORY
?