Разница между контекстом

Возможный дубликат:
Android - в чем разница между различными методами получения контекста?

Я хочу знать, в чем разница между использованием this, ClassName.this, getApplicationContext() или myContext?

Каковы эффекты использования каждого из них в качестве контекста в приведенном ниже тосте?

public class ClassName extends Activity {
    final ClassName myContext = this;
    ...
    public void onCreate(Bundle savedInstanceState) {
    ...
    button.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(), "This is a toast", Toast.LENGTH_LONG).show();
        }

    });
    }

Не могли бы вы указать мне подробное объяснение контекстов? Я прочитал сообщение Ромена Гая здесь. Может быть, еще несколько примеров помогут :)


person yojoannn    schedule 23.07.2012    source источник
comment
Ага. я тоже так думаю ... не видел этого. спасибо @Andro!   -  person yojoannn    schedule 23.07.2012
comment
Однако я не согласен с их выводами. :-) Я думаю, вам следует использовать контекст Activity всякий раз, когда он работает, и использовать контекст Application только при необходимости, для инкапсуляции и ограничения времени жизни объектов до минимальной релевантной области.   -  person Sparky    schedule 23.07.2012


Ответы (2)


Контекст приложения привязан к жизненному циклу приложения, а контекст действия - к жизненному циклу действия. Таким образом, у каждого из них есть своя область действия, и их нужно использовать для получения информации на этом уровне.

Обычно вы всегда должны использовать контекст Acitity Context, если вам не нужен контекст, жизненный цикл которого отделен от текущего действия.

Что может привести к утечкам памяти, так это использование контекста приложения, привязка его к объектам, которые следует собирать сборщиком мусора, но, сохраняя этот соответствующий атрибут (контекст приложения), их сбор не допускается.

person Iñigo    schedule 23.07.2012

Activity и Application являются производными от класса Context. Следовательно, this можно использовать вместо объекта Context, когда ваш код является частью класса Activity или Application. Помимо одного из них (например, в фрагменте) вы можете вызвать getActivity(), чтобы получить включающее действие (и использовать его в качестве контекста). getApplicationContext () - это то, как ваша Activity расширяет контекст, чем он сам. Вам может понадобиться это, если вам нужно использовать Context за пределами срока действия Activity, в котором вы его получили (например, передавая его в длительный фоновый поток).

Вероятно, вам не нужен контекст приложения в вашем тосте. Но при его использовании ваш тост должен оставаться видимым и не вызывать сбоев, даже если вы покидаете действие, с которого его начали.

person Sparky    schedule 23.07.2012