คำถามติดแท็ก activity-lifecycle

15
การลบกิจกรรมออกจากสแต็กประวัติ
แอพของฉันแสดงกิจกรรมการสมัครเป็นครั้งแรกที่ผู้ใช้รันแอพดูเหมือนว่า: ActivitySplashScreen (ยินดีต้อนรับสู่เกมสมัครใช้งานบัญชี?) ActivitySplashScreenSignUp (ดีมากกรอกข้อมูลนี้) ActivityGameMain (หน้าจอเกมหลัก) ดังนั้นกิจกรรมที่เปิดตัวกันในลำดับที่เมื่อผู้ใช้คลิกผ่านปุ่มในแต่ละหน้าจอ เมื่อผู้ใช้เปลี่ยนจากกิจกรรม # 2 ถึง # 3 เป็นไปได้ไหมที่จะลบ # 1 และ # 2 ออกจากสแต็กประวัติทั้งหมด? ฉันต้องการให้ผู้ใช้อยู่ที่ # 3 และกดปุ่มย้อนกลับพวกเขาเพียงไปที่หน้าจอหลักแทนที่จะกลับไปที่หน้าจอเริ่มต้น ฉันคิดว่าฉันสามารถทำสิ่งนี้ได้ด้วยงาน (เช่นเริ่มงานใหม่ใน # 3) แต่ต้องการดูว่ามีวิธีที่ง่ายกว่านี้ไหม ขอบคุณ

18
เมื่อล็อกเอาต์ให้ล้างสแต็คประวัติกิจกรรมป้องกันปุ่ม "ย้อนกลับ" จากการเปิดกิจกรรมที่ลงชื่อเข้าใช้เท่านั้น
กิจกรรมทั้งหมดในแอปพลิเคชันของฉันต้องการให้ผู้ใช้ลงชื่อเข้าใช้เพื่อดู ผู้ใช้สามารถออกจากระบบได้เกือบทุกกิจกรรม นี่คือข้อกำหนดของแอปพลิเคชัน ที่จุดใด ๆ Activityหากผู้ใช้ล็อกเอาผมต้องการที่จะส่งให้ผู้ใช้เข้าสู่ระบบ ณ จุดนี้ฉันต้องการให้กิจกรรมนี้อยู่ด้านล่างของสแต็คประวัติเพื่อให้การกดปุ่ม "ย้อนกลับ" ส่งคืนผู้ใช้ไปยังหน้าจอหลักของ Android ฉันเคยเห็นคำถามนี้ถามสถานที่ที่แตกต่างกันไม่กี่ทั้งหมดตอบด้วยคำตอบที่คล้ายกัน (ที่ฉันร่างที่นี่) แต่ฉันต้องการที่จะก่อให้เกิดที่นี่เพื่อรวบรวมข้อเสนอแนะ ฉันได้ลองเปิดกิจกรรมการเข้าสู่ระบบโดยการตั้งค่าIntentสถานะFLAG_ACTIVITY_CLEAR_TOPที่ดูเหมือนว่าจะทำตามที่ระบุไว้ในเอกสาร แต่ไม่บรรลุเป้าหมายของฉันในการวางกิจกรรมการเข้าสู่ระบบที่ด้านล่างของสแต็คประวัติศาสตร์และป้องกันผู้ใช้จากการนำทางย้อนกลับ ไปยังกิจกรรมการลงชื่อเข้าใช้ที่เห็นก่อนหน้านี้ ฉันพยายามใช้android:launchMode="singleTop"กิจกรรมการเข้าสู่ระบบในรายการด้วย แต่สิ่งนี้ไม่บรรลุเป้าหมายของฉันเช่นกัน (และดูเหมือนว่าจะไม่มีผลกระทบต่อไป) ฉันเชื่อว่าฉันต้องล้างสแต็คประวัติหรือจบกิจกรรมที่เปิดก่อนหน้านี้ทั้งหมด ทางเลือกหนึ่งคือการมีonCreateสถานะเข้าสู่ระบบการตรวจสอบของแต่ละกิจกรรมและfinish()หากไม่ได้เข้าสู่ระบบ ฉันไม่ชอบตัวเลือกนี้เนื่องจากปุ่มย้อนกลับจะยังคงใช้งานได้นำทางกลับเป็นกิจกรรมที่ปิดตัวเอง ตัวเลือกถัดไปคือการเก็บรักษาLinkedListของการอ้างอิงถึงกิจกรรมที่เปิดอยู่ทั้งหมดที่สามารถเข้าถึงได้แบบคงที่จากทุกที่ (อาจใช้การอ้างอิงที่อ่อนแอ) เมื่อออกจากระบบฉันจะเข้าถึงรายการนี้และทำซ้ำกิจกรรมที่เปิดก่อนหน้านี้ทั้งหมดโดยเรียกใช้finish()แต่ละรายการ ฉันจะเริ่มใช้วิธีนี้ในไม่ช้า อย่างไรก็ตามฉันควรใช้Intentเล่ห์เหลี่ยมธงเพื่อบรรลุเป้าหมายนี้ ฉันมีความสุขเกินกว่าจะพบว่าฉันสามารถทำตามข้อกำหนดของแอปพลิเคชันของฉันได้โดยไม่ต้องใช้วิธีใดวิธีหนึ่งจากสองวิธีที่ฉันได้อธิบายไว้ข้างต้น มีวิธีในการทำสิ่งนี้ให้สำเร็จโดยใช้Intentหรือการตั้งค่ารายการหรือตัวเลือกที่สองของฉันการรักษาLinkedListกิจกรรมที่เปิดไว้เป็นตัวเลือกที่ดีที่สุดหรือไม่? หรือมีตัวเลือกอื่นที่ฉันสามารถมองเห็นได้อย่างสมบูรณ์?

12
Activity.finish () วิธีการทำอะไรกันแน่?
ฉันกำลังพัฒนาแอปพลิเคชั่น Android สักระยะหนึ่งและตามมาเป็นจำนวนมากเกี่ยวกับวงจรชีวิตของกิจกรรมและวงจรชีวิตของแอปพลิเคชัน ฉันรู้ว่าActivity.finish()วิธีการโทรไปที่ไหนสักแห่งActivity.onDestroy()และยังลบกิจกรรมออกจากสแต็คและฉันคิดว่ามันชี้ไปที่ระบบปฏิบัติการและตัวรวบรวมขยะที่เขาสามารถ "ทำกลอุบายของเขา" และเพิ่มหน่วยความจำเมื่อพบว่ามันเป็นเวลาที่ดี ดังนั้น.... ฉันมาที่โพสต์นี้ - จะเลิกสมัครได้หรือไม่? และอ่านคำตอบของ Mark Murphy มันทำให้ฉันสับสนเล็กน้อยเกี่ยวกับfinish()วิธีการที่แท้จริง มีโอกาสที่ฉันจะโทรหาfinish()และonDestroy()จะไม่ถูกเรียก?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.