В чем разница между Activity и Context?

92

Являются ли Activity и Context одинаковыми или есть различия?

Когда мне следует передать метод Activity, а когда - Context?

Android
источник
@Egor Thnx man, и я угрюмо позабочусь об этом ... прежде чем задать вопрос ... не могли бы вы помочь мне еще в одном вопросе ... в чем корень всей активности в Android
Android
пожалуйста, проверьте обсуждение ниже, чтобы прояснить вопрос
Егор
Жаль, что ни один из этих ответов не является полным. Это первый элемент, который появляется при поиске в Google.
SMBiggs

Ответы:

118

Насколько я понимаю: контекст - это базовый объект. Так каждый деятельности такой же , как приложения происходит от контекста. Это означает, что каждое действие и каждое ApplicationЯВЛЯЕТСЯ a Context;

Из developer.android.com активности

java.lang.Objectandroid.content.Contextandroid.content.ContextWrapperandroid.view.ContextThemeWrapperandroid.app.Activity

И приложение

java.lang.Objectandroid.content.Contextandroid.content.ContextWrapperandroid.app.Application

Контекст приложения существует до тех пор, пока живо ваше приложение, в то время как контекст действия умирает вместе с вашим действием (он недействителен после onDestroyэтого действия).

Поэтому, если вам нужен контекст между действиями (например, в синглтоне), вам будет лучше использовать контекст приложения.

Обычно в методах Android Framework, где ожидается контекст, не имеет значения, какой из них вы передадите. Но всегда помните об утечках памяти, если вы храните долгоживущие ссылки на контекст.

Рафаэль Т
источник
2
Да, извините, я проверил ссылку, действительно Context - это суперкласс Activity. В любом случае не совсем правильно говорить, что Activity - это контекст, Activity - более сложный объект, а Context - это просто блок, который содержит информацию и дает доступ к ресурсам.
Егор
@Rafael T Спасибо за правильный ответ
Android
17
совершенно правильно, если я имею в виду объектно-ориентированные языки: каждый объект в Java является производным от Object.class, поэтому на ФАКТЕ все ЯВЛЯЕТСЯ объектом. Чтобы быть более конкретным: активность - это специализация контекста. Если у меня есть абстрактный класс Animal и два класса, производные от Animal (Cat, Dog), эти два являются по крайней мере животными. Везде, где требуется животное, вы можете пройти мимо кошек или собак, как и в контексте! Пожалуйста, подтвердите информацию, прежде чем вы проголосуете против меня
Рафаэль Т
1
«Контекст действия длится, пока живо ваше приложение, а контекст действия умирает вместе с вашим действием», похоже, отключен. Разве первым не должен быть контекст приложения ?
FirstOne
8

Как вы можете видеть в документе Android :

Класс Activity расширяется от ContextThemeWrapper, этот - от ContextWrapper, а тот - от Context.

Итак, да, действие расширяет контекст!

сапотек
источник