แอตทริบิวต์taskAffinity
ใช้สำหรับอะไร? ฉันอ่านเอกสารแล้วแต่ไม่เข้าใจมากนัก
ใครสามารถอธิบายความสัมพันธ์ของงานในแง่คนธรรมดาได้ไหม
แอตทริบิวต์taskAffinity
ใช้สำหรับอะไร? ฉันอ่านเอกสารแล้วแต่ไม่เข้าใจมากนัก
ใครสามารถอธิบายความสัมพันธ์ของงานในแง่คนธรรมดาได้ไหม
คำตอบ:
Android Task Affinity ใช้ทำอะไร
แอปพลิเคชัน Android มีกิจกรรมที่รวมกันเป็นกอง ๆ เหมือนสำรับไพ่ หากคุณเริ่มแอปพลิเคชัน Android และเริ่มกิจกรรม 5 อย่าง A, B, C, D, E พวกมันจะรวมตัวกันเป็นกอง
E - chat view
D - weather screen
C - map view
B - weather screen
A - login screen
E เป็นกิจกรรมสุดท้ายที่จะเริ่มต้นและกำลังแสดงอยู่ ถ้าคุณปิด E D จะแสดง หากคุณปิด D C จะแสดงขึ้น เป็นต้น
สังเกตว่ากิจกรรมB
และD
เป็นกิจกรรมเดียวกัน จะเกิดอะไรขึ้นถ้าผู้ใช้ทำการแก้ไขบางอย่างD weather screen
แล้วตัดสินใจปิดกิจกรรมแล้วปิดC Map view
?
จากนั้นผู้ใช้จะกลับมาที่หน้าจอสภาพอากาศและผู้ใช้จะไม่มีความสุขเพราะการเปลี่ยนแปลงที่เกิดขึ้นในระดับที่ไม่ได้ถูกบันทึกไว้ในระดับD weather screen
B weather screen
แม้ว่าจะเป็นกิจกรรมเดียวกัน แต่ก็เป็น STATE ที่แตกต่างกันของกิจกรรมนั้น
ผู้ใช้มีกิจกรรมซ้อนกัน 5 ชั้นและสองกิจกรรมนั้นเป็นกิจกรรมเดียวกัน การดึงทั้ง 5 ออกจากสแต็กจะสร้างปรากฏการณ์ที่คุณจะโต้ตอบกับกิจกรรมเดียวกันสองเวอร์ชันที่แตกต่างกันและอาจทำให้เกิดความสับสนได้
โดยปกติผู้ใช้มักไม่คิดในแง่ของการจัดกิจกรรมที่เข้มงวด พวกเขาคิดว่า: "โอ้มุมมองสภาพอากาศฉันจะเปลี่ยนแปลงตรงนั้น" จากนั้นพวกเขาก็ต้องการกลับไปที่มุมมองแผนที่ จากนั้นสำรองข้อมูลอีกครั้งเพราะต้องการกลับไปที่หน้าจอเข้าสู่ระบบ ทำไมB weather app
การแสดงและทำไมมันไม่ได้บันทึกการตั้งค่าจากระดับD
?
โปรแกรมเมอร์อาจสามารถบรรเทาความสับสนได้หากมีกิจกรรมB
และD
เชื่อมโยงอยู่ในสถานะ วิธีนั้นเปลี่ยนไปเป็นการเปลี่ยนอีกแบบ ทุกครั้งที่ผู้ใช้เปิดหน้าจอสภาพอากาศใหม่ผู้ใช้จะแอบเปิดหน้าจอสภาพอากาศเพียงครั้งเดียว
ในสถานการณ์เช่นนี้การเปลี่ยน taskAffinity ของกิจกรรมอาจเป็นสิ่งที่พึงปรารถนา ผู้ใช้จะเปลี่ยนระดับ D จากนั้นสำรองข้อมูลไปที่ระดับ B และดูการเปลี่ยนแปลงใน B ที่ทำกับ D
โปรแกรมเก็บสแต็กที่คุณสามารถสำรองข้อมูลได้ซึ่งเป็นสิ่งที่ดีและเมื่อผู้ใช้เปิดอินสแตนซ์ X ของกิจกรรมเดียวกันในที่สุ่มพวกเขาทั้งหมดจะเป็นหนึ่งเดียวกัน
สไลด์โชว์พร้อมคำอธิบายเพิ่มเติม: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack
singleInstance
แทนการใช้taskAffinity
?
taskAffinity
เลย :-( คำอธิบายคลุมเครือน่าทึ่งที่คำตอบเหล่านี้ได้รับคะแนนโหวตเพิ่มขึ้นมากมาย
taskAffinity
ใช้เพื่อระบุชื่อของงานที่กิจกรรมต้องการให้รันเมื่อIntent
มีแฟล็FLAG_ACTIVITY_NEW_TASK
กกิจกรรมจะถูกใส่ลงในงานนี้โดยเฉพาะ (กำหนดโดยtaskAffinity
)
Although it's the same activity, it's a different STATE of that activity.
ฉันจะบอกว่า "มันเป็นอีกตัวอย่างหนึ่งของกิจกรรมนั้น"
ความสัมพันธ์ระบุว่ากิจกรรมใดที่ต้องการเป็นของงาน
ความสัมพันธ์เข้ามามีบทบาทในสองสถานการณ์:
เมื่อเจตนาที่เริ่มต้นกิจกรรมมีแฟล็ก FLAG_ACTIVITY_NEW_TASK
เมื่อกิจกรรมมีแอตทริบิวต์ allowTaskReparenting ตั้งค่าเป็น "true"
โปรดดูที่http://developer.android.com/guide/components/tasks-and-back-stack.html
คุณสามารถค้นหากรณีทั้งหมด (และบางครั้งขอบกรณี) ในการนำเสนอโดยละเอียดนี้
โปรดอ้างอิงการจัดการงาน Android และกองหลัง