Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android utiliza el nombre de componente para iniciar una actividad

Hay muchas maneras de comenzar otra actividad. La mayoría de los métodos de sobrecarga requiere que pase un contexto.

Pero al usar componentName para iniciar una actividad usando

public Intent setComponent (ComponentName component) 

Y este constructor para ComponentName

 ComponentName(String pkg, String cls) 

Usted ve arriba, puedo lanzar una actividad SIN usar cualquier argumento de Contexto

Pero debe usar algún "contexto" de alguna manera internamente, ¿estoy bien? En caso afirmativo, ¿qué contexto? Aplicación uno o la actividad uno? ¿Significa esto que cada vez que uso estos dos métodos (arriba), no necesito preocuparme por el escape de memoria porque no estoy pasando ningún contexto alrededor ??

Gracias

4 Solutions collect form web for “Android utiliza el nombre de componente para iniciar una actividad”

No tiene que preocuparse por fugas de memoria en ninguno de los casos, pero es bueno que esté vigilando dónde está pasando los objetos Context. Intent utiliza simplemente el parámetro Contexto para buscar el nombre del paquete cuando utiliza el constructor Intent(Context, Class) o el setClass(Context, Class) . Son sólo métodos de conveniencia.

La respuesta de adamp es correcta (él llegó a ella antes de poder publicar).

Solo para expandirlo, esta es la fuente para el constructor Intent(Context packageContext, Class<?> cls)

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

… y esta es la fuente para ComponentName(Context pkg, Class<?> cls) constructor

 public ComponentName(Context pkg, Class<?> cls) { mPackage = pkg.getPackageName(); mClass = cls.getName(); } 

Como sugiere adamp, los métodos de Intent que toman un Context son métodos de conveniencia que solo lo usan para crear el ComponentName que a su vez sólo se ocupa de los tipos String ( mPackage y mClass ). Ni el Intent ni el ComponentName contienen una referencia al Context .

startActivity() no requiere un contexto como parámetro; Es un método dentro de una clase que ya se deriva de (o implementa) Contexto. Es decir – no puedes llamar a startActivity() si no tienes un Contexto desde el cual llamarla.

Tal vez no entiendo tu pregunta. Pero no utilizas el contexto cuando defines intentos. Utiliza el contexto para llamar a los componentes con intents. Por ejemplo, utiliza:

 context.startActivity(intent) 

Pero por lo general usted llama a estos métodos dentro de sus actividades y servicios, que amplía el contexto. Por lo tanto, simplemente utiliza:

 startActivity(intent) 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.