Bagaimana cara membunuh aktivitas Android ketika meninggalkannya sehingga tidak dapat diakses dari tombol kembali?

130

Dalam aktivitas Android tertentu, saya ingin memulai aktivitas baru untuk pengguna di beberapa titik. Begitu mereka meninggalkan aktivitas pertama dan tiba di aktivitas kedua, aktivitas pertama sudah basi dan saya ingin menghapusnya sepenuhnya sehingga tidak dapat diakses lagi dari tombol kembali.

Bagaimana cara terbaik untuk mencapai ini? Bagaimana cara saya membunuh atau menghancurkan aktivitas ini segera setelah pengguna meluncurkan aktivitas baru?

JohnRock
sumber
Lihat jawaban ini , itu berguna bagi saya.
Daniyar

Jawaban:

234

Anda hanya perlu menelepon finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
CaseyB
sumber
Terima kasih. Untuk mengambil satu langkah lebih jauh, saya memulai aktivitas baru dari jendela dialog - apakah kode bekerja dengan cara yang sama?
JohnRock
@CaseyB terima kasih untuk ini..tapi saya ingin tahu, dapatkah saya memanggil metode ini dari Layanan jika ya lalu bagaimana?
swiftBoy
1
Layanan tidak memiliki Kegiatan yang berarti bahwa mereka tidak akan berada di tumpukan aktivitas untuk kembali ke. Jika Anda ingin mematikan beberapa aktivitas dari layanan Anda, Anda harus dapat memanggil myActivity.finish ();
CaseyB
3
Jawabannya adalah 7 tahun, namun masih berlaku untuk Android M dan N.
zeeshan
1
@juztcode onDestroyadalah metode siklus hidup yang hanya dimaksudkan untuk dipanggil dari kerangka kerja Android.
CaseyB
106

Menyetel android:noHistory="true"aktivitas di manifes Anda akan menghapus aktivitas dari tumpukan kapan pun ia dinavigasi. lihat di sini

jqpubliq
sumber
11

kamu bisa memakai:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Jmorvan
sumber
menarik! apa arti "FLAG_ACTIVITY_NO_HISTORY"?
Armando Marques Sobrinho
8

Anda juga dapat menambahkan tag android:noHistory="true"Anda Activitydi AndroidManifest.xml.

<activity
            ...
            android:noHistory="true">
</activity>
Danke Xie
sumber
7

Ya, yang perlu Anda lakukan adalah panggilan selesai () dalam Aktivitas apa pun yang ingin Anda tutup.

RobGThai
sumber
4

Tulis ini di setiap "aktivitas baru" setelah Anda menginisialisasi niat baru Anda->

Intent i = new Intent(this, yourClass.class);
startActivity(i);
finish();
JBL AK-47
sumber
2

Akhirnya, saya mendapat solusi!

Konteks saya adalah : - Saya ingin memutuskan koneksi soket ketika aktivitas hancur, saya mencoba untuk menyelesaikan () aktivitas tetapi tidak berhasil , koneksi tetap di suatu tempat.

jadi saya menggunakan android.os.Process.killProcess(android.os.Process.myPid()); kill aktivitas saya dan saya gunakan android:excludeFromRecents="true" untuk menghapus dari aktivitas terbaru.

iamkdblue
sumber
1
Solusi ini berfungsi untuk saya tetapi sayangnya menunjukkan halaman kosong dan untuk menutup koneksi soket Anda dapat menggunakan socket.close (); .
Mehrdad
android.os.Process.killProcess(android.os.Process.myPid())membunuh proses aplikasi dan tidak hanya aktivitas. Ini berarti bahwa setiap layanan yang sedang berlangsung (latar belakang atau latar depan) akan dihentikan juga.
Wrichik Basu
1

Tambahkan atribut ini ke aktivitas Anda dalam file manifes. android: noHistory = "true"

Mayuran Balasubramaniam
sumber
0

Anda hanya perlu menggunakan kode di bawah ini ketika meluncurkan aktivitas baru.

startActivity(new Intent(this, newactivity.class));
finish();
Soni Kumar
sumber