inicializar - que es context service en android
¿Cómo obtener AssetManager sin referencia al contexto? (2)
- Cree una subclase de
Application
, por ejemplo,public class App extends Application {
- Establezca el atributo
android:name
de su etiqueta<application>
en elAndroidManifest.xml
para que apunte a su nueva clase, por ejemplo,android:name=".App"
- En el método
onCreate()
de su instancia de aplicación, guarde su contexto (por ejemplo,this
) en un campo estático llamadoapp
y cree un método estático que devuelva este campo, por ejemplo,getApp()
:
Así es como debe verse:
public class App extends Application{
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
Ahora puede usar: App.getContext()
cuando quiera obtener un contexto, y luego getAssetManager()
(o App.getContext().getAssetManager()
).
Tengo una clase que necesita obtener una referencia al AssetManager
de su aplicación. Esta clase no extiende ningún tipo de clase de interfaz de usuario de Android, por lo que no tiene un método getContext()
, ni nada similar. ¿Hay algún tipo de Context.getCurrentApplicationContext()
estático Context.getCurrentApplicationContext()
?
Para aclarar: mi clase está diseñada para usarse como una biblioteca, para otras aplicaciones. No tiene asociado AndroidManifest.xml
ni control sobre el contexto que lo está llamando.
No estoy seguro de cuál es la mejor respuesta a la pregunta OP. Sin embargo, sí sé que debes tener mucho cuidado al usar un contexto estático como se sugiere en los recursos para desarrolladores de Android :
En el método
onCreate()
de su instancia de aplicación, guarde su contexto (por ejemplo, esto) en un campo estático llamado app y cree un método estático que devuelva este campo, por ejemplo,getApp()
:
El uso de contextos estáticos puede filtrarse a problemas de memoria perdidos, especialmente si el contexto estático se usa para referencias a vistas.