studio programacion para herramientas desarrollo con avanzado aplicaciones android android-activity android-context

android - programacion - ¿Práctica recomendada para pasar el contexto a clases que no son de actividad?



manual android studio avanzado (3)

Por lo general, lo mejor para usted es simplemente pasar el contexto actual en el momento en que es necesario. Almacenarlo en una variable miembro probablemente genere una pérdida de memoria y empiece a causar problemas a medida que desarrolle más actividades y servicios en su aplicación.

public void iNeedContext(Context context) {...

Además, en cualquier clase que tenga contexto, recomendaría hacer una variable miembro para facilitar la lectura y la capacidad de búsqueda, en lugar de pasar directamente o (ClassName.)this . Por ejemplo en MainActivity.java :

Context mContext = MainActivity.this; Activity mActivity = MainActivity.this;

Por lo tanto, mi primera aplicación principal está casi codificada y estoy optimizando mi código. La aplicación funciona bien, pero no estoy seguro de mi forma de pasar el contexto a otras clases. No quiero hacerlo de la manera incorrecta. Me encontré con artículos y preguntas aquí en Stackoverflow sobre contextos y cuál es la forma correcta de pasarlo a clases que no son de actividad. También leo la documentación, pero ser un finlandés hace que la tecnología complicada sea aún más difícil de entender.

Entonces, una pregunta simple. ¿Es correcta mi forma de pasar el contexto de mi actividad principal a otras clases (auxiliares)? Si no, ¿dónde puedo leer más sobre mejores prácticas en estas situaciones?

Por ejemplo: MainActivity.java

public class MainActivity extends Activity { @Override protected void onCreate(Bundle sis){ super(sis); new Helper(MyActivity.this).makeMyAppAwesome(); } }

Helper.java

public class Helper { Context context; Helper(Context ctx){ this.context = ctx; } public void makeMyAppAwesome(){ makeBaconAndEggsWithMeltedCheese(context); } }

¿Esta bien? Sería bueno que alguien pudiera proporcionar un artículo fácil de leer con ejemplos sobre este tema.


Puede hacerlo usando ContextWrapper , como se describe aquí.

Por ejemplo:

public class MyContextWrapper extends ContextWrapper { public MyContextWrapper(Context base) { super(base); } public void makeMyAppAwesome(){ makeBaconAndEggsWithMeltedCheese(this); } }

Y llama a la clase de no actividad como esta de una actividad

new MyContextWrapper(this);


También puede crear una referencia de instancia estática a su MainActivity inicializada en el método onCreate()

public class MainActivity extends AppCompatActivity { public static MainActivity mMainActivity; @Override private onCreate(Bundle savedInstanceState){ //... mMainActivity = this; } }

y llamar al contexto de esta manera:

MainActivity.mMainActivity;

o escriba un método getInstanceOf() si está más claro y / o prefiere usar un accesorio

MainActivity.getInstanceOf();

Esta estrategia puede proporcionarle cierta flexibilidad si luego decide que desea llamar a un método de instancia contenido en su actividad principal de esta manera:

MainActivity.mMainActivity.myInstanceMethod();

Sólo una sugerencia. La crítica es bienvenida y alentada.