Qual é a diferença entre Activity e Context?

91

Atividade e contexto são iguais ou existem diferenças?

Quando devo fazer com que um método passe uma atividade e quando um contexto?

Android
fonte
@Egor Thnx cara, e grosseiro eu vou cuidar disso .. antes de fazer a pergunta .. você pode me ajudar em mais uma pergunta .. qual é a raiz de todas as atividades no Android
Android
verifique a discussão abaixo para esclarecer a questão
Egor
Pena que nenhuma dessas respostas seja muito completa. Este é o primeiro item que aparece para uma pesquisa no Google.
SMBiggs

Respostas:

118

Tanto quanto eu entendo: Context is the Base Object. Portanto, cada Activity igual a Application deriva do Context. Isso significa que cada atividade e cada ApplicationIS a Context;

Da developer.android.com atividade

java.lang.Object
   android.content.Context
       android.content.ContextWrapper
           android.view.ContextThemeWrapper
               android.app.Activity

E aplicativo

java.lang.Object
   android.content.Context
       android.content.ContextWrapper
           android.app.Application

Um contexto de aplicativo dura, enquanto seu aplicativo está ativo, enquanto o contexto de atividade morre com sua atividade (não é válido depois onDestroydessa atividade).

Portanto, se você precisa do Contexto entre Atividades (ou seja, em um Singleton), será melhor usar um contexto de Aplicativo.

Normalmente, nos métodos do Android Framework em que um contexto é esperado, não faz diferença em qual deles você passa. Mas esteja sempre ciente de MemoryLeaks se você estiver mantendo referências de longa duração para um contexto

Rafael T
fonte
2
Sim, desculpe, verifiquei o link, na verdade, Context é uma superclasse de Activity. De qualquer forma, não é totalmente correto dizer que Activity é um Contexto, Activity é um objeto mais complexo, enquanto Context é apenas um bloco que contém a informação e dá acesso aos recursos.
Egor
@Rafael T Thnx por dar uma resposta adequada
Android
17
está completamente certo se eu me referir a linguagens orientadas a objetos: cada objeto em Java deriva de Object.class, então em FACT tudo É um objeto. Para ser mais específico: a atividade é uma especialização do contexto. Se eu tenho um Animal de classe abstrata e duas classes que são derivadas de Animal (gato, cachorro), esses dois são pelo menos Animais. Em todos os lugares onde um Animal é necessário, você pode passar em Cães ou Gatos, pois é o mesmo para o Contexto! Confirme as informações antes de me votar negativamente
Rafael T
1
"Um contexto de atividade dura, enquanto seu aplicativo está ativo, enquanto o contexto de atividade morre com sua atividade" parece desligado. O primeiro não deveria ser o contexto do aplicativo ?
FirstOne
8

Como você pode ver no documento Android :

A classe Activity estende-se de "ContextThemeWrapper", esta de "ContextWrapper" e aquela de "Context".

Então, sim, uma atividade estende o contexto!

zapoteca
fonte