Usando a classe de aplicativo
Dependendo do que você está fazendo em sua inicialização, você pode considerar criar uma nova classe que estenda Applicatione mova seu código de inicialização para um onCreatemétodo substituído dentro dessa classe.
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}
o onCreate classe na aplicação é chamada somente quando o aplicativo inteiro é criado; portanto, a atividade é reiniciada com alterações na orientação ou na visibilidade do teclado não a acionará.
É uma boa prática expor a instância desta classe como um singleton e expor as variáveis de aplicativo que você está inicializando usando getters e setters.
NOTA: Você precisará especificar o nome da sua nova classe Application no manifesto para que ela seja registrada e usada:
<application
android:name="com.you.yourapp.MyApplicationClass"
Reagindo a alterações na configuração [UPDATE: isso foi preterido desde a API 13; veja a alternativa recomendada ]
Como alternativa adicional, você pode fazer com que seu aplicativo escute eventos que causariam uma reinicialização - como alterações na orientação e na visibilidade do teclado - e lide com eles na sua Atividade.
Comece adicionando o android:configChangesnó ao nó de manifesto da sua atividade
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
ou para Android 3.2 (API nível 13) e mais recente :
<activity android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
Em seguida, na Atividade, substitua o onConfigurationChangedmétodo e chame setContentViewpara forçar o layout da GUI a ser refazer na nova orientação.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}