ApplicationContext
не обязательно совпадает с объектом Application
. Я видел это чаще всего в эмуляторах, но это также может зависеть от устройства.
В приложении Java вы можете привести объект, возвращенный Activity#getApplication()
. Но согласно сообщению на форуме Xamarin , эквивалентного метода в Xamarin не существует. Вместо этого вы можете разыграть свойство Application
:
MyApplication app = (MyApplication) Application;
Я не уверен, когда установлено свойство, поэтому это может не работать в инициализаторе поля.
Другой вариант - MyApplication
сохранить статическую ссылку на себя в OnCreate()
и предоставить статический получатель. Хотя статические поля обычно являются злыми, это работает, потому что экземпляр Application
фактически является одиночным, и его OnCreate
будет вызываться до того, как будет создан любой другой компонент. Статическая ссылка не может утечь приложение, потому что у приложения уже есть то же время жизни, что и у процесса.