¿Cuál es la diferencia entre actividad y contexto?

92

¿Son la actividad y el contexto lo mismo o hay diferencias?

¿Cuándo debería hacer que un método pase una actividad y cuándo un contexto?

Androide
fuente
@Egor Thnx man, y malhumorado me encargaré de eso ... antes de hacer la pregunta ... ¿me pueden ayudar en una pregunta más ... cuál es la raíz de toda la actividad en Android?
Android
Consulte la discusión a continuación para aclarar la pregunta
Egor
Lástima que ninguna de estas respuestas sea muy completa. Este es el primer elemento que aparece para una búsqueda en Google.
SMBiggs

Respuestas:

118

Por lo que tengo entendido: el contexto es el objeto base. Por tanto, todas las actividades iguales a las de las aplicaciones se derivan del contexto. Esto significa que cada Actividad y cada ApplicationES a Context;

De developer.android.com actividad

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

Y aplicación

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

Un contexto de Aplicación dura, mientras su aplicación esté viva, mientras que el contexto de Actividad muere con su Actividad (no es válido después onDestroyde esa Actividad).

Entonces, si necesita el contexto en todas las actividades (es decir, en un Singleton), será mejor que use un contexto de aplicación.

Por lo general, en los métodos de Android Framework donde se espera un contexto, no importa cuál pase. Pero tenga en cuenta siempre MemoryLeaks si mantiene referencias a un contexto de larga duración

Rafael T
fuente
2
Sí, lo siento, he comprobado el enlace, de hecho, el contexto es una superclase de actividad. De todos modos, no es del todo correcto decir que la actividad es un contexto, la actividad es un objeto más complejo, mientras que el contexto es solo un bloque que contiene la información y da acceso a los recursos.
Egor
@Rafael T Thnx por dar una respuesta adecuada
Android
17
es completamente correcto si me refiero a lenguajes orientados a objetos: cada objeto en Java se deriva de Object.class, por lo que, de hecho, todo ES un objeto. Para ser más específicos: la actividad es una especialización del contexto. Si tengo un animal de clase abstracta y dos clases que se derivan de animal (gato, perro), estas dos son al menos animales. En cualquier lugar donde se requiera un animal, está bien pasar gatos o perros, ¡ya que es lo mismo para Context! Por favor, confirme la información antes de votar en contra
Rafael T
1
"Un contexto de actividad dura, mientras su aplicación esté viva, mientras que el contexto de actividad muere con su actividad" parece apagado. ¿No debería ser el primero el contexto de la aplicación ?
FirstOne
8

Como puede ver en el documento de Android :

La clase Activity se extiende desde "ContextThemeWrapper", y esta de "ContextWrapper", y la de "Context".

Entonces, sí, ¡una actividad extiende el contexto!

zapoteca
fuente