Usando la clase de aplicación
Dependiendo de lo que esté haciendo en su inicialización, podría considerar crear una nueva clase que se extienda Application
y mover su código de inicialización a un onCreate
método anulado dentro de esa clase.
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}
La onCreate
clase en la aplicación solo se llama cuando se crea la aplicación completa, por lo que la actividad se reinicia en la orientación o los cambios de visibilidad del teclado no lo activarán.
Es una buena práctica exponer la instancia de esta clase como un singleton y exponer las variables de aplicación que está inicializando usando getters y setters.
NOTA: Deberá especificar el nombre de su nueva clase de Aplicación en el manifiesto para que se registre y se use:
<application
android:name="com.you.yourapp.MyApplicationClass"
Reacción a los cambios de configuración [ACTUALIZACIÓN: esto está en desuso desde API 13; ver la alternativa recomendada ]
Como alternativa adicional, puede hacer que su aplicación escuche eventos que causarían un reinicio, como cambios de orientación y visibilidad del teclado, y manejarlos dentro de su Actividad.
Comience agregando el android:configChanges
nodo al nodo manifiesto de su Actividad
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
o para Android 3.2 (API nivel 13) y más reciente :
<activity android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
Luego, dentro de la Actividad, anule el onConfigurationChanged
método y llame setContentView
para forzar que el diseño de la GUI se vuelva a hacer en la nueva orientación.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}