О контексте Android - PullRequest
       3

О контексте Android

1 голос
/ 01 ноября 2011

Я вставляю часть своего кода здесь:

public void onCreate(Bundle savedInstanceState) {
        Log.e("Main Activity", "OnCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_frame);

        //GlowEffect is the custom class's constructor:GlowEffect(context);
        new GlowEffect2(getApplictionContext());

        AlertDialog.Builder builder = new Builder(this);
...
...

Я нахожу, что когда я изменяю параметр в **Builder(this)** на Builder(getApplicationContext()); Приложение вылетает!В то время как конструктор GlowEffect2 работает хорошо независимо от того, является ли параметр "this" или "getApplicationContext()". Так в чем же разница между двумя параметрами?

1 Ответ

3 голосов
/ 01 ноября 2011

Как вы заметили, конструктор для Builder принимает в качестве аргумента объект Context .

Объекты Activity и Application являются подклассами Context, поэтому любой из них будет допустимым параметром для создания Builder.

Объект -> Контекст -> ContextWrapper -> Приложение
Объект -> Контекст -> ContextWrapper -> ContextThemeWrapper -> Активность

В чем разница между приложением и действием? Я думаю, что одно из самых очевидных отличий заключается в их жизненных циклах:

  • Активность будет существовать до тех пор, пока работает этот конкретный элемент пользовательского интерфейса, и будет уничтожена и воссоздана в различных ситуациях, например, при изменении ориентации, или когда действие не просматривается, и ОС Android необходимо освободить часть памяти, уничтожив действия, которые не просматриваются.

  • Приложение будет работать до тех пор, пока само приложение работает.

Что касается вашей конкретной проблемы, что такое трассировка стека для сбоя? Этот вопрос говорит о том, что getApplicationContext() может быть нулевым, поскольку приложение все еще запускается во время создания действия (ответ говорит, что проблема была исправлена ​​в Android OS 1.6).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...