อะไรคือความแตกต่างระหว่างกิจกรรมและบริบท?


92

กิจกรรมและบริบทเหมือนกันหรือมีความแตกต่าง?

ฉันควรมีวิธีการส่งผ่านกิจกรรมเมื่อใดและบริบทเมื่อใด


@Egor Thnx man และฉันจะดูแลมัน .. ก่อนที่จะถามคำถาม .. คุณช่วยฉันในอีกคำถามหนึ่งได้ไหม .. อะไรคือรากฐานของกิจกรรมทั้งหมดใน Android
Android

โปรดตรวจสอบการสนทนาด้านล่างเพื่อเคลียร์คำถาม
Egor

น่าเสียดายที่ไม่มีคำตอบใดที่สมบูรณ์ นี่เป็นรายการแรกที่ปรากฏขึ้นสำหรับการค้นหาโดย Google
SMBiggs

คำตอบ:


118

เท่าที่ฉันเข้าใจ: บริบทคือวัตถุฐาน ดังนั้นทุกกิจกรรม เช่นเดียวกับแอปพลิเคชันมาจากบริบท ซึ่งหมายความว่าทุกกิจกรรมและทุกอย่างApplicationเป็นContext;

จากdeveloper.android.com กิจกรรม

java.lang.Objectandroid.content.Contextandroid.content.ContextWrapperandroid.view.ContextThemeWrapperandroid.app.Activity

และApplication

java.lang.Objectandroid.content.Contextandroid.content.ContextWrapperandroid.app.Application

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

ดังนั้นหากคุณต้องการบริบทข้ามกิจกรรม (เช่นใน Singleton) คุณจะดีกว่าเมื่อใช้บริบทของแอปพลิเคชัน

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


2
ใช่ฉันขอโทษฉันได้ตรวจสอบลิงก์แล้ว Context เป็นคลาสชั้นสูงของกิจกรรม อย่างไรก็ตามมันไม่ถูกต้องอย่างสมบูรณ์ที่จะพูดว่ากิจกรรมเป็นบริบทกิจกรรมเป็นวัตถุที่ซับซ้อนกว่าในขณะที่บริบทเป็นเพียงบล็อกที่เก็บข้อมูลและให้การเข้าถึงทรัพยากร
Egor

@Rafael T Thnx ที่ให้คำตอบที่ถูกต้อง
Android

17
เป็นเรื่องที่ถูกต้องถ้าฉันอ้างถึงภาษาเชิงวัตถุ: ทุก ๆ วัตถุใน Java มาจาก Object.class ดังนั้นใน FACT ทุกอย่างจึงเป็นวัตถุ เพื่อให้เฉพาะเจาะจงมากขึ้น: Acivity เป็นความเชี่ยวชาญของบริบท ถ้าฉันมีสัตว์คลาสนามธรรมและสองคลาสที่มาจากสัตว์ (แมวสุนัข) อย่างน้อยทั้งสองก็เป็นสัตว์ ทุกที่ที่จำเป็นต้องมีสัตว์คุณสามารถผ่าน Cats หรือ Dogs ได้เนื่องจาก Context เหมือนกัน! โปรดยืนยันข้อมูลก่อนที่คุณจะลงคะแนน
Rafael T

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

8

ดังที่คุณเห็นในเอกสาร Android :

คลาสกิจกรรมขยายจาก "ContextThemeWrapper" และคลาสนี้มาจาก "ContextWrapper" และคลาสนี้มาจาก "บริบท"

ใช่แล้วกิจกรรมขยายบริบท!

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