เสร็จสิ้นกิจกรรมก่อนหน้านี้ทั้งหมด


368

แอปพลิเคชันของฉันมีหน้าจอโฟลว์ต่อไปนี้:

Home->screen 1->screen 2->screen 3->screen 4->screen 5

ตอนนี้ฉันมีlog out ปุ่มทั่วไปในแต่ละหน้าจอ

( Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5)

ฉันต้องการที่เมื่อผู้ใช้คลิกที่ปุ่มออกจากระบบ (จากหน้าจอใด ๆ ) หน้าจอทั้งหมดจะเสร็จสิ้นและหน้าจอใหม่Log inจะเปิดขึ้น

ฉันพยายามเกือบทั้งหมดFLAG_ACTIVITYเพื่อให้บรรลุสิ่งนี้ ฉันยังได้คำตอบบางอย่างใน stackoverflow แต่ไม่สามารถแก้ปัญหาได้ แอปพลิเคชันของฉันใช้ Android 1.6 ดังนั้นจึงไม่สามารถใช้งานได้FLAG_ACTIVITY_CLEAR_TASK

มีวิธีใดในการแก้ปัญหาหรือไม่


คุณรันกิจกรรมที่ซ้อนอยู่โดยใช้ startActivityForResult หรือไม่?
woodshy

ไม่กิจกรรมทั้งหมดเริ่มต้นด้วย startActivity
Tanmay Mandal

ฉันกำลังใช้กิจกรรมที่ซ้อนอยู่ในขณะที่ cod รัน finishaffinitytask () ในกิจกรรมที่ซ้อนอยู่ มันเปลี่ยนพฤติกรรมหรือไม่ เพราะบางครั้งฉันได้รับความล้มเหลวในการส่งผลลัพธ์ ResultInfo เมื่อ finishaffinitytask ทำงาน
Ripal Tamboli

โปรดตรวจสอบคำตอบนี้แน่นอนมันจะช่วยให้คุณstackoverflow.com/a/25159180/2732632
Kimmi Dhingra

3
แอนดรอยด์ 21 เปิดตัว Activity.finishAndRemoveTask ()
โจเซฟจอห์นสัน

คำตอบ:


543

ใช้:

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

นี้จะล้างกิจกรรมทั้งหมดที่ด้านบนของบ้าน

สมมติว่าคุณเสร็จสิ้นหน้าจอเข้าสู่ระบบเมื่อผู้ใช้เข้าสู่ระบบและที่บ้านถูกสร้างขึ้นและหลังจากนั้นหน้าจอทั้งหมดจาก 1 ถึง 5 ด้านบนของหน้าจอนั้น รหัสที่ฉันโพสต์จะนำคุณกลับสู่หน้าจอหลักเพื่อจบกิจกรรมอื่น ๆ ทั้งหมด คุณสามารถเพิ่มความตั้งใจและอ่านสิ่งนั้นในกิจกรรมบนหน้าจอหลักและดำเนินการให้เสร็จสิ้น (อาจเปิดหน้าจอเข้าสู่ระบบอีกครั้งจากที่นั่นหรือบางสิ่ง)

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

หวังว่านี่จะช่วยได้


ผู้ใช้กำลังแสดงหน้าจอแรกของเขาเป็นหน้าจอหลักนั่นคือปัญหาหลัก
Tanmay Mandal

เช่นเดียวกับที่ฉันมีการตอบสนองของฉันคุณต้องกลับไปที่หน้าจอหลักและจบที่หนึ่ง ดังนั้นกระบวนการเรียกเจตนาข้างต้นจากหน้าจอใด ๆ ได้รับความตั้งใจในหน้าจอหลักและแจ้งความตั้งใจในการเข้าสู่ระบบและสิ้นสุดที่บ้านทันทีหลังจากวิธี startActivity คุณยังสามารถแทนที่ภาพเคลื่อนไหวที่ค้างอยู่เป็นโมฆะเพื่อเข้าและออกเพื่อไม่ให้แสดงการเปลี่ยนแปลง (ฉันทำเพราะรู้สึกว่าเร็วกว่า) ดังนั้นควรทำงานได้ดีกับสิ่งที่คุณต้องการ
DArkO

10
แทนที่จะประกาศกิจกรรมเป็นsingleInstanceพิจารณาใช้FLAG_ACTIVITY_CLEAR_TOP|FLAG_ACTIVITY_SINGLE_TOPเป็นแฟล็กสำหรับเจตนา กิจกรรมนี้จะเสร็จสิ้นการแทรกแซงและเริ่มต้น (หรือนำกลับมาที่ส่วนหน้า) กิจกรรมที่ต้องการ
CommonsWare

13
@ CommonsWare การเพิ่มintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);กิจกรรมของฉันไม่ได้ช่วย me.It ไม่จบแทรกแซง activities.When ผมกดกลับมาจากหน้าจอเข้าสู่ระบบที่ฉันสามารถดู activities.Here Intent intent=new Intent(BaseActivity.this, Login.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);startActivity(intent);ก่อนหน้านี้คือรหัสของฉัน
Tanmay Mandal

26
รหัสนี้เท่านั้นที่จะล้างกิจกรรมสแต็คชั้นนำสำหรับการล้างกิจกรรมทั้งหมดที่ตั้งใจ addFlags (Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
Ajay Venugopal

318

Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASKคุณอาจลอง มันจะล้างกิจกรรมก่อนหน้าทั้งหมดและเริ่มกิจกรรมใหม่ทั้งหมด


11
ทางออกที่เหมาะสม แต่เฉพาะ API
11+

ฉันลงเอยด้วยการใช้การตั้งค่าสถานะพิเศษนี้เนื่องจากไม่ทำให้เกิดความล่าช้าเมื่อแสดงกิจกรรมหลัก (มันจะไม่เริ่มใหม่ดังนั้นจึงเร็วกว่ามาก)
Maurizio

2
@riwnodennyk ทำไมต้องเป็น API 11+
มูฮัมหมัดบาบาร์

17
ใช้ IntentCompat.FLAG_ACTIVITY_CLEAR_TASK สำหรับรุ่น 11 ก่อน
Steven Pena

2
@ono ใช่ นั่นควรเป็นสิ่งที่คุณต้องการ ตรวจสอบให้แน่ใจว่าโหมดการเปิดใช้กิจกรรมเป้าหมายของคุณถูกตั้งค่าเป็น "singleTask" ในไฟล์ Manifest
Steven Pena

137

ก่อนที่จะเปิดตัวกิจกรรมใหม่ของคุณเพียงเพิ่มรหัสต่อไปนี้:

finishAffinity();

หรือถ้าคุณต้องการให้มันทำงานบน Android เวอร์ชั่นก่อนหน้า:

ActivityCompat.finishAffinity(this);

12
ActivityCompat.finishAffinity (นี้); เรียกใช้งาน activity.finish () สำหรับ api <16. ดังนั้นมันจะไม่ทำงาน
Aamir Abro

1
@Beto Caldas ฉันได้รับการยืนยันรหัสแหล่งที่มาด้วยตัวเองมันจะไม่ทำงานสำหรับ API <16 ตามที่ AamirAbro พูดถึง มันจะเสร็จสิ้นกิจกรรมที่คุณส่งผ่าน API <16
HendraWD

39

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

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

LoginActivityรหัสข้างต้นล้างกิจกรรมทั้งหมดยกเว้น จากนั้นวางโค้ดต่อไปนี้ไว้ภายในLoginActivity's onCreate(...)เพื่อฟังเวลาที่LoginActivityถูกสร้างใหม่และสัญญาณ' EXIT 'ถูกส่งผ่าน:

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();  
}

เหตุใดการสร้างปุ่มออกใน Android จึงเป็นเรื่องยาก

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

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

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


31
Intent intent = new Intent(this, classObject);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

สิ่งนี้จะใช้ได้กับ Android ทุกรุ่น ที่ไหนIntentCompatชั้นเรียนเพิ่มในห้องสมุดสนับสนุน Android


IntentCompat.FLAG_ACTIVITY_CLEAR_TASKไม่ได้รับการยอมรับให้ใช้แทนIntent IntentCompat
CoolMind

30

ใช้กิจกรรมต่อไปนี้

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

ลบ CLEAR_TASK flag สำหรับการใช้แฟรกเมนต์

ฉันหวังว่านี่อาจใช้สำหรับบางคน


24

ฉันเดาว่าฉันมาสาย แต่มีคำตอบที่ง่ายและสั้น มีวิธี finishAffinity () ในกิจกรรมที่จะเสร็จสิ้นกิจกรรมปัจจุบันและกิจกรรมหลักทั้งหมด แต่ใช้งานได้เฉพาะใน Android 4.1 หรือสูงกว่า

สำหรับ API 16+ ให้ใช้

finishAffinity();

สำหรับต่ำกว่า 16 ใช้

ActivityCompat.finishAffinity(YourActivity.this);

หวังว่ามันจะช่วย!


21

จากdeveloper.android.com :

public void finishAffinity ()

เพิ่มใน API ระดับ 16

เสร็จสิ้นกิจกรรมนี้รวมถึงกิจกรรมทั้งหมดที่อยู่ด้านล่างในภารกิจปัจจุบันที่มีความสัมพันธ์แบบเดียวกัน โดยทั่วไปจะใช้เมื่อแอปพลิเคชันสามารถเปิดใช้งานในงานอื่น (เช่นจาก ACTION_VIEW ของประเภทเนื้อหาที่เข้าใจ) และผู้ใช้ใช้การนำทางขึ้นเพื่อสลับออกจากงานปัจจุบันและงานของตัวเอง ในกรณีนี้หากผู้ใช้เข้าไปในกิจกรรมอื่น ๆ ของแอปพลิเคชั่นที่สองทั้งหมดเหล่านั้นควรถูกลบออกจากงานเดิมซึ่งเป็นส่วนหนึ่งของสวิตช์งาน

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


19

ในด้านทราบดี
คำตอบนี้ใช้ได้ ( https://stackoverflow.com/a/13468685/7034327 )

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
this.finish();

ขณะนี้ไม่ทำงาน

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

.setFlags() แทนที่ธงใด ๆ ก่อนหน้าและไม่ผนวกธงใหม่ ๆ ในขณะที่.addFlags()ไม่

ดังนั้นสิ่งนี้จะได้ผล

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

คำอธิบายที่ดีเกี่ยวกับความแตกต่างระหว่าง setFlag กับ addFlag ขอบคุณ
Pelanes

13

หากแอปพลิเคชันของคุณมี sdk ขั้นต่ำเวอร์ชัน 16 คุณสามารถใช้finishAffinity ()

เสร็จสิ้นกิจกรรมนี้รวมถึงกิจกรรมทั้งหมดที่อยู่ด้านล่างในภารกิจปัจจุบันที่มีความสัมพันธ์แบบเดียวกัน

หน้าจอนี้ใช้งานได้สำหรับฉันในการชำระเงินสูงสุดลบการเปิดใช้งานการย้อนกลับทั้งหมด

@Override
public void onBackPressed() {
         finishAffinity();
        startActivity(new Intent(PaymentDoneActivity.this,Home.class));
    } 

http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29


10

วิธีแก้ปัญหาที่ฉันนำมาใช้กับสิ่งนี้ (ฉันคิดว่าฉันพบใน Stack Overflow ที่ไหนซักแห่ง แต่ฉันจำไม่ได้ดังนั้นต้องขอบคุณใครก็ตามที่ทำสิ่งนั้นตั้งแต่แรก):

จากกิจกรรมใด ๆ ของคุณทำสิ่งนี้:

// Clear your session, remove preferences, etc.
Intent intent  = new Intent(getBaseContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

จากนั้นใน LoginActivity ของคุณเขียนทับ onKeyDown:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

3
ปกติแล้วมันจะเป็นความคิดที่แย่มาก แต่อาจใช้งานได้มันแนะนำจุดติดต่อที่อาจแตกหักได้ในอนาคตและยากต่อการแก้ไข ฉันกำลังบอกคุณจากประสบการณ์ :)
Martin Marconcini

10

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

{
Intent intent = new Intent(this, loginScreen.class);
ntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}

8
    Intent i1=new Intent(getApplicationContext(),StartUp_Page.class);
i1.setAction(Intent.ACTION_MAIN);
i1.addCategory(Intent.CATEGORY_HOME);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i1);
finish();

6
ทำไมFLAG_ACTIVITY_CLEAR_TASKสองครั้ง
Choletski

1
จากสิ่งที่ฉันเข้าใจ. setFlags แทนที่ค่าสถานะก่อนหน้าและไม่ผนวกค่าสถานะใด ๆ .addFlags เป็นสิ่งที่คุณต้องการใช้ฉันเข้าใจไหม ทำให้รหัสทั้งหมดด้านบน i1.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); ได้รับการล้างออก
iOSAndroidWindowsMobileAppsDev

addFlags ใช้งานได้สำหรับฉัน
Jamil

1
setFlagsจะแทนที่ทั้งหมดก่อนหน้านี้ดังนั้นสุดท้ายsetFlagsเท่านั้นที่ถูกต้องก่อนหน้านี้จะถูกแทนที่ ดังนั้นคุณไม่จำเป็นต้องโทรi1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
mtrakal

8

ฉันมีปัญหาเดียวกันคุณสามารถใช้IntentCompatเช่นนี้

import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

รหัสนี้ใช้ได้สำหรับฉัน

Android API 17


8

ในกรณีของฉันฉันใช้finishAffinity()ฟังก์ชั่นในกิจกรรมล่าสุดเช่น:

finishAffinity()
startHomeActivity()

หวังว่ามันจะมีประโยชน์



6

เข้าสู่ระบบ -> หน้าแรก> หน้าจอ 1-> หน้าจอ 2-> หน้าจอ 3> หน้าจอ 4-> หน้าจอ 5

บนหน้าจอ 4 (หรืออื่น ๆ ) ->

StartActivity (เข้าสู่ระบบ)
กับ
FLAG_ACTIVITY_CLEAR_TOP


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

6

สำหรับ API> = 15 ถึง API 23 โซลูชันแบบง่าย

 Intent nextScreen = new Intent(currentActivity.this, MainActivity.class);
 nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
 startActivity(nextScreen);
 ActivityCompat.finishAffinity(currentActivity.this);

อธิบายเพิ่มเติมคำตอบของคุณเพื่อให้ทุกคนได้ประโยชน์จากมัน
Shubhamoy

5

หากคุณกำลังใช้startActivityForResult()ในกิจกรรมก่อนหน้าของคุณเพียงแค่แทนที่OnActivityResult()และเรียกfinish();วิธีการภายในกิจกรรมทั้งหมด .. สิ่งนี้จะทำงาน ...


ไม่ฉันใช้startActivityเท่านั้น
Tanmay Mandal

มันจะยากที่จะรักษาonActivityResultในแต่ละกิจกรรมฉันได้ทำตามข้อเสนอแนะของ DArkO และบรรลุเป้าหมายของฉันและขอบคุณสำหรับความช่วยเหลือ
Tanmay Mandal

3

เมื่อผู้ใช้คลิกที่ปุ่มออกจากระบบแล้วเขียนรหัสต่อไปนี้:

Intent intent = new Intent(this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

และเมื่อหลังจากเข้าสู่ระบบถ้าคุณเรียกใช้กิจกรรมใหม่อย่าใช้เสร็จสิ้น ();


2

เพียงเมื่อคุณไปจากหน้าจอเข้าสู่ระบบไม่ใช่เมื่อเสร็จสิ้นหน้าจอเข้าสู่ระบบ

จากนั้นในกิจกรรมการส่งต่อทั้งหมดให้ใช้สิ่งนี้เพื่อออกจากระบบ:

final Intent intent = new Intent(getBaseContext(), LoginScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);

มันทำงานได้อย่างสมบูรณ์


1

หากคุณเข้าสู่ระบบของผู้ใช้ในscreen 1และจากที่นั่นคุณไปที่หน้าจออื่น ๆ ให้ใช้

Intent intent = new Intent(this, Screen1.class);
intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

เมื่อฉันกดปุ่มย้อนกลับกิจกรรมก่อนหน้านี้ทั้งหมดจะแสดงตามลำดับกิจกรรมที่พวกเขาต้องปิดเมื่อคลิกปุ่มออกจากระบบจะมีเพียงกิจกรรมเดียวในสแต็กและจะเป็นกิจกรรมการเข้าสู่ระบบ
Tanmay Mandal

หากคุณต้องการพฤติกรรมนี้คุณต้องแทนที่ onKeyDownและonBackPressed(หรือonKeyDownหากคุณต้องการสนับสนุน Android เวอร์ชัน <2.0) ในแต่ละกิจกรรมของคุณ (ยกเว้นชื่อล็อกอิน) และstartActivity(login)มีดังที่แสดงด้านบน
Gabriel Negut

ฉันมีปุ่มที่จะพาฉันไปที่หน้าจอการเข้าสู่ระบบจบกิจกรรมทั้งหมดในสแต็คเป็นไปได้หรือไม่
Tanmay Mandal

1

ฉันพบวิธีนี้มันจะล้างประวัติและทางออกทั้งหมด

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Intent intent = new Intent(getApplicationContext(), SplashScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

finish();
System.exit(0);

1

ฉันเดาว่าฉันมาสาย แต่มีคำตอบที่ง่ายและสั้น มีวิธี finishAffinity () ในกิจกรรมที่จะเสร็จสิ้นกิจกรรมปัจจุบันและกิจกรรมหลักทั้งหมด แต่ใช้งานได้เฉพาะใน Android 4.1 หรือสูงกว่า

สำหรับ API 16+ ให้ใช้

finishAffinity ();

สำหรับต่ำกว่า 16 ใช้

ActivityCompat.finishAffinity (YourActivity.this);

หวังว่ามันจะช่วย!

shareedit ตอบ 27 พฤษภาคม '18 เวลา 8:03 น

Akshay Taru


0

ฉันพบวิธีนี้ในการทำงานกับทุกอุปกรณ์แม้จะมีระดับ API (แม้สำหรับ <11)

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);

0

วิธีที่ดีที่สุดในการปิดกิจกรรมก่อนหน้านี้ทั้งหมดและล้างหน่วยความจำ

finishAffinity()
System.exit(0);

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