2011-04-09 25 views

Respuesta

7

Puede pasar cualquier objeto Context que haya obtenido de cualquiera de las clases de su aplicación. Entonces puede usar un objeto Activity, Service o puede llamar a getApplicationContext() y pasar el objeto Context devuelto al constructor Intent.

+4

Si el Contexto Paso es arbitraria, ¿por qué necesitamos este argumento? ¿Por qué este constructor Intent # (Class cls)? –

+0

Tienes razón, la documentación es realmente extraña. Pero si revisa algunos de los tutoriales, verá que normalmente la Actividad en la que se crea el Intento se pasa al constructor como un objeto de contexto. – Flo

+4

No estoy seguro si esto hizo que los documentos fueran más claros para mí. Ya sabía por los tutoriales que puedo pasar una Actividad, Servicio o getApplicationContext() aquí. Pero los documentos todavía no tienen sentido para mí. ¿Por qué está etiquetado como "paquete"? ¿Qué clase es "esta clase"? ¿Qué pasa con ... "del paquete de aplicación que implementa" ..., hay múltiples paquetes potenciales que se espera que estén en la aplicación o qué? Tal vez sea solo yo, tal vez es una fraseología desafortunada. – n611x007

6

Considere el contexto como un estado de su aplicación. Se utiliza para manipular recursos y servicios utilizados por la aplicación como base de datos, archivos locales, cargadores de clases, preferencias compartidas, etc.

Cuando alguien te llama y pregunta por tu tiempo, ¿qué es lo primero que dices ... ¿A qué se refiere esto? o ¿cuál es el contexto de esta conversación? Según el contexto, puede decidir si vale la pena continuar con la llamada o no. Si continúas, la conversación debería ser relativamente fácil ya que conoces el contexto.

Lo mismo ocurre con Intents. ¿Qué es un intento? Algo que tiene una intención. Una de ellas es comenzar una actividad.

Intent intent = new Intent(getApplicationContext(),ActivityTwo.class); 
startActivity(intent); 

Si esto hace que su concepto un poco más claro que vamos a proceder a su pregunta y la API actual -

Intent#(Context packageContext, Class<?> cls) 

Como usted tiene avisos primer argumento debe ser de tipo Context que sabemos que es una clase abstracta. Por lo general, puede pasar cualquier clase concreta que se extienda a la clase Context, siendo Activity una de ellas (en cuyo caso, simplemente use this en el argumento).

enter image description here

+0

su respuesta es realmente útil. Sólo una cosa. ¿El contexto de la aplicación es exclusivo de una aplicación? Porque suena único. –

1

creo que está destinado a ser el contexto en relación con el paquete de aplicación la aplicación de la clase actual.

Por ejemplo, si está en una clase de perro y tiene la siguiente estructura de paquete com.mycompany.dogfinder.dog, el contexto del paquete se refiere al contexto asociado con el paquete que implementa la clase de perro. En este caso, el contexto asociado con la clase de perro sería el contexto relacionado con el paquete de aplicación com.mycompany.dogfinder.

Esto me llevó un tiempo entender lo que se decía, pero creo que eso es lo que significa.

-1

Para iniciar la actividad de la actividad:

public SomeActivity extends Activity{ 
    ... 
    private startAnother(){ 
     Intent intent = new Intent(getApplicationContext(), AnotherActivity.class); 
     startActivity(intent);// works fine 
     getApplicationContext().startActivity(intent)//works too, 
     //but flag Intent.FLAG_ACTIVITY_NEW_TASK needed and new you will get  
     //backstack offcourse 
    } 
    ... 
    } 

Intención usando el contexto para la creación de ComponentName solamente:

public Intent(Context packageContext, Class<?> cls) { 
     mComponent = new ComponentName(packageContext, cls); 
    } 

// Identifier for a specific application component 
    public ComponentName(Context pkg, Class<?> cls) { 
     mPackage = pkg.getPackageName(); 
     mClass = cls.getName(); 
    } 
Cuestiones relacionadas