วิธีฆ่ากิจกรรม Android เมื่อปล่อยไว้เพื่อไม่ให้เข้าถึงจากปุ่มย้อนกลับ?


131

ในกิจกรรม Android ที่กำหนดฉันต้องการเริ่มกิจกรรมใหม่สำหรับผู้ใช้ ณ จุดหนึ่ง เมื่อพวกเขาออกจากกิจกรรมแรกและมาถึงกิจกรรมที่สองกิจกรรมแรกนั้นค้างและฉันต้องการลบออกทั้งหมดเพื่อไม่ให้เข้าถึงได้อีกจากปุ่มย้อนกลับ

วิธีที่ดีที่สุดในการทำสิ่งนี้คืออะไร? ฉันจะฆ่าหรือทำลายกิจกรรมนี้ทันทีหลังจากที่ผู้ใช้เปิดตัวกิจกรรมใหม่ได้อย่างไร


ตรวจสอบคำตอบนี้มีประโยชน์สำหรับฉัน
Daniyar

คำตอบ:


235

คุณเพียงแค่ต้องโทร finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();

ขอบคุณ. เพื่อให้ก้าวไปอีกขั้นฉันกำลังเริ่มกิจกรรมใหม่จากหน้าต่างการสนทนา - โค้ดจะทำงานในลักษณะเดียวกันหรือไม่
JohnRock

@CaseyB ขอบคุณสำหรับสิ่งนี้ .. แต่ฉันอยากรู้ฉันสามารถเรียกวิธีนี้จากบริการได้หรือไม่ถ้าใช่แล้วจะทำอย่างไร?
swiftBoy

1
บริการไม่มีกิจกรรมซึ่งหมายความว่าจะไม่อยู่ในกองกิจกรรมเพื่อย้อนกลับไป หากคุณต้องการฆ่ากิจกรรมบางอย่างจากบริการของคุณคุณควรโทรหา myActivity.finish ();
CaseyB

3
เป็นคำตอบที่มีอายุ 7 ปีและยังใช้ได้กับ Android M และ N
zeeshan

1
@juztcode onDestroyเป็นวิธีวงจรชีวิตที่มีไว้เพื่อเรียกใช้จากกรอบงาน Android เท่านั้น
CaseyB

106

การตั้งค่าandroid:noHistory="true"กิจกรรมในรายการของคุณจะลบกิจกรรมออกจากสแต็กเมื่อใดก็ตามที่มีการนำทางออกไป ดูที่นี่



8

นอกจากนี้คุณยังสามารถเพิ่มandroid:noHistory="true"ที่คุณแท็กในActivityAndroidManifest.xml

<activity
            ...
            android:noHistory="true">
</activity>

7

ใช่สิ่งที่คุณต้องทำคือโทรเสร็จ () ในกิจกรรมใด ๆ ที่คุณต้องการปิด


4

เขียนสิ่งนี้ใน "กิจกรรมใหม่" แต่ละครั้งหลังจากที่คุณเริ่มจุดประสงค์ใหม่ ->

Intent i = new Intent(this, yourClass.class);
startActivity(i);
finish();

2

ในที่สุดฉันก็ได้ทางออก!

บริบทของฉันคือ - ฉันต้องการยกเลิกการเชื่อมต่อซ็อกเก็ตเมื่อกิจกรรมถูกทำลายฉันพยายามที่จะเสร็จสิ้น () กิจกรรม แต่มันไม่ได้ผลฉันยังคงเชื่อมต่ออยู่ที่ไหนสักแห่ง

ดังนั้นฉันจึงใช้ android.os.Process.killProcess(android.os.Process.myPid()); มันฆ่ากิจกรรมของฉันและฉันใช้android:excludeFromRecents="true" สำหรับลบออกจากกิจกรรมล่าสุด


1
วิธีนี้ใช้ได้ผลสำหรับฉัน แต่น่าเสียดายที่แสดงหน้าว่างและเพื่อปิดการเชื่อมต่อซ็อกเก็ตคุณสามารถใช้ socket.close (); .
Mehrdad

android.os.Process.killProcess(android.os.Process.myPid())ฆ่ากระบวนการของแอปและไม่เพียง แต่กิจกรรมเท่านั้น ซึ่งหมายความว่าบริการที่กำลังดำเนินอยู่ (พื้นหลังหรือพื้นหน้า) จะถูกหยุดด้วย
Wrichik Basu


0

คุณต้องใช้โค้ดด้านล่างนี้เมื่อเปิดตัวกิจกรรมใหม่

startActivity(new Intent(this, newactivity.class));
finish();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.