studio preferencias preferencia ejemplo editar archivos activity android

preferencias - android: cómo usar getApplication y getApplicationContext de la clase de actividad/servicio



editar preferencias android (7)

Estoy usando la extensión de la clase de aplicación en Android para compartir mis datos en toda la aplicación.

Puedo usar el método getApplication() de todas mis actividades.

Sin embargo, hay ciertas clases personalizadas de ayuda que creé; por ejemplo, una clase XMLHelper que no hereda de ninguna clase de actividad / servicio.

Aquí el método getApplication() no está disponible.

¿Cómo puedo resolver esto y cuáles son las mejores prácticas de diseño para resolver esto?


El método getApplication() se encuentra en la clase Activity , por eso no se puede acceder desde su clase de ayuda.

Si realmente necesita acceder al contexto de su aplicación desde su ayudante, debe mantener una referencia al contexto de la actividad y pasarla en la invocación al ayudante.


El método getApplication() se encuentra en la clase Activity , por lo que siempre que desee getApplication() en una clase que no sea de actividad, debe pasar una instancia de Activity al constructor de esa clase que no sea de actividad.

Supongamos que la prueba es mi clase de no actividad:

Test test = new Test(this);

En esa clase, he creado un constructor:

public Class Test { public Activity activity; public Test (Activity act) { this.activity = act; // Now here you can get getApplication() } }


Enviar su contexto de actividad a otras clases podría causar pérdidas de memoria porque mantener vivo ese contexto es la razón por la que el GC no puede eliminar el objeto


Lanzar un objeto Contexto a un objeto Activity compila bien.

Prueba esto:

((Activity) mContext).getApplication(...)


Para evitar pasar este argumento, uso la clase derivada de la Aplicación

public class MyApplication extends Application { private static Context sContext; @Override public void onCreate() { super.onCreate(); sContext= getApplicationContext(); } public static Context getContext() { return sContext; }

e invocar MyApplication.getContext() en las clases de Ayuda


Pase en un Contexto (para que pueda acceder a los recursos) o establezca los métodos auxiliares.


intenta esto, llamando a la actividad en el constructor

public class WebService { private Activity activity; public WebService(Activity _activity){ activity=_activity; helper=new Helper(activity); } }