คำถามที่น่าสนใจมาก ฉันคิดว่ามันเป็นความหมายเชิงความหมายส่วนใหญ่และอาจเป็นเพราะเหตุผลทางประวัติศาสตร์
แม้ว่าในกิจกรรม Android และการใช้งานบริการปัจจุบันgetApplication()และgetApplicationContext()ส่งคืนวัตถุเดียวกันไม่มีการรับประกันว่านี่จะเป็นกรณี (เช่นในการใช้งานของผู้ขายที่เฉพาะเจาะจง)
ดังนั้นหากคุณต้องการคลาสแอปพลิเคชันที่คุณลงทะเบียนใน Manifest คุณไม่ควรโทรgetApplicationContext()และส่งไปยังแอปพลิเคชันของคุณเพราะมันอาจไม่ใช่อินสแตนซ์ของแอปพลิเคชัน
ทำไม getApplicationContext()มีอยู่ในสถานที่แรก?
getApplication() มีเฉพาะในคลาสกิจกรรมและคลาสบริการเท่านั้น getApplicationContext()มีการประกาศในคลาสบริบท
นั่นหมายถึงสิ่งหนึ่ง: เมื่อเขียนโค้ดในเครื่องรับสัญญาณออกอากาศซึ่งไม่ใช่บริบท แต่ได้รับบริบทในวิธีการ onReceive คุณสามารถโทรได้เท่านั้น getApplicationContext()ของคุณสามารถโทรออกเท่านั้น ซึ่งหมายความว่าคุณไม่รับประกันว่าจะสามารถเข้าถึงแอปพลิเคชันของคุณใน BroadcastReceiver
เมื่อดูรหัส Android คุณจะเห็นว่าเมื่อแนบมาแล้วกิจกรรมจะได้รับบริบทพื้นฐานและแอปพลิเคชันและสิ่งเหล่านั้นเป็นพารามิเตอร์ที่แตกต่างกัน ผู้ได้รับมอบหมายก็เรียกร้องให้getApplicationContext()baseContext.getApplicationContext()
อีกอย่างหนึ่ง: เอกสารบอกว่าส่วนใหญ่คุณไม่จำเป็นต้องใช้คลาสย่อย:
โดยปกติแล้วไม่มีต้อง Applicationsubclass ในสถานการณ์ส่วนใหญ่ Singletons แบบคงที่สามารถให้ฟังก์ชั่นเดียวกันในทางโมดูลาร์มากขึ้น หากซิงเกิลของคุณต้องการบริบทส่วนกลาง (ตัวอย่างเช่นในการลงทะเบียนเครื่องรับสัญญาณออกอากาศ) ฟังก์ชั่นเพื่อดึงข้อมูลสามารถกำหนดสิ่ง
Contextที่ใช้ภายในContext.getApplicationContext()เมื่อสร้างซิงเกิลครั้งแรก
ฉันรู้ว่านี่ไม่ใช่คำตอบที่แน่นอนและแม่นยำ แต่ถึงกระนั้นนั่นก็ตอบคำถามของคุณได้หรือไม่?
Applicationวัตถุในแอปของคุณอย่างชัดเจน