Дуже цікаве запитання. Я думаю, що це в основному смислове значення, а також може бути пов'язано з історичними причинами.
Незважаючи на те, що в поточних реалізаціях Android Activity і Service getApplication()
і getApplicationContext()
повертається той самий об’єкт, немає гарантії, що так буде завжди (наприклад, у конкретній реалізації постачальника).
Отже, якщо ви хочете, щоб клас Application, який ви зареєстрували в Manifest, ніколи не повинен дзвонити getApplicationContext()
і передавати його своїй програмі, тому що це може бути не екземпляр програми (що, очевидно, ви мали досвід тестових рамок).
Чому getApplicationContext()
існує в першу чергу?
getApplication()
доступний лише у класі активності та у службовому класі, тоді getApplicationContext()
як оголошується у класі контексту.
Це насправді означає одне: коли ви пишете код у широкомовному приймачі, який не є контекстом, а надається контекстом у його методі onReceive, ви можете лише зателефонувати getApplicationContext()
. Це також означає, що вам не гарантується доступ до вашої програми в BroadcastReceiver.
Переглядаючи код Android, ви бачите, що при вкладенні активність отримує базовий контекст і додаток, і це різні параметри. getApplicationContext()
делегатів, на які він закликає baseContext.getApplicationContext()
.
І ще одне: документація говорить про те, що в більшості випадків вам не потрібно підкласифікувати додаток:
Зазвичай не потрібно підклас Application
. У більшості випадків статичні одинаки можуть надавати однакові функціональні можливості більш модульним способом. Якщо вашому синглтону потрібен глобальний контекст (наприклад, для реєстрації приймачів широкомовної передачі), функція його отримання може бути надана функцією,
Context
яка використовується внутрішньо Context.getApplicationContext()
при першому конструюванні сингтона.
Я знаю, що це не точна і точна відповідь, але все-таки це відповідає на ваше запитання?
Application
об'єкт у вашій програмі.