Как вы заметили, конструктор для Builder принимает в качестве аргумента объект Context .
Объекты Activity и Application являются подклассами Context, поэтому любой из них будет допустимым параметром для создания Builder.
Объект -> Контекст -> ContextWrapper -> Приложение
Объект -> Контекст -> ContextWrapper -> ContextThemeWrapper -> Активность
В чем разница между приложением и действием? Я думаю, что одно из самых очевидных отличий заключается в их жизненных циклах:
Активность будет существовать до тех пор, пока работает этот конкретный элемент пользовательского интерфейса, и будет уничтожена и воссоздана в различных ситуациях, например, при изменении ориентации, или когда действие не просматривается, и ОС Android необходимо освободить часть памяти, уничтожив действия, которые не просматриваются.
Приложение будет работать до тех пор, пока само приложение работает.
Что касается вашей конкретной проблемы, что такое трассировка стека для сбоя? Этот вопрос говорит о том, что getApplicationContext()
может быть нулевым, поскольку приложение все еще запускается во время создания действия (ответ говорит, что проблема была исправлена в Android OS 1.6).