Очень интересный вопрос Я думаю, что это в основном семантическое значение, а также может быть связано с историческими причинами.
Хотя в текущих реализациях Android Activity и Service getApplication()
и getApplicationContext()
возвращают один и тот же объект, нет гарантии, что это всегда будет иметь место (например, в реализации конкретного поставщика).
Поэтому, если вам нужен класс Application, который вы зарегистрировали в Manifest, вы никогда не должны вызывать getApplicationContext()
и приводить его к вашему приложению, потому что это может быть не экземпляр приложения (который вы, очевидно, испытывали в тестовой среде).
Почему getApplicationContext()
существует в первую очередь?
getApplication()
доступно только в классе Activity и классе Service, тогда getApplicationContext()
как объявлено в классе Context.
На самом деле это означает одно: при написании кода в широковещательном приемнике, который не является контекстом, а задан контекст в его методе onReceive, вы можете только вызывать getApplicationContext()
. Это также означает, что вам не гарантирован доступ к вашему приложению в BroadcastReceiver.
Глядя на код Android, вы видите, что при подключении активность получает базовый контекст и приложение, и это разные параметры. getApplicationContext()
делегаты это вызов baseContext.getApplicationContext()
.
Еще одна вещь: в документации сказано, что в большинстве случаев вам не нужно создавать подкласс Application:
Обычно нет необходимости создавать подклассы Application
. В большинстве случаев статические синглтоны могут предоставлять ту же функциональность более модульным способом. Если вашему синглтону необходим глобальный контекст (например, для регистрации широковещательных приемников), функции для его извлечения может быть предоставлена функция,
Context
которая используется внутри Context.getApplicationContext()
при первом создании синглтона.
Я знаю, что это не точный и точный ответ, но все же, это отвечает на ваш вопрос?
Application
объект в своем приложении.