Использование класса приложения
В зависимости от того, что вы делаете при инициализации, вы можете рассмотреть возможность создания нового класса, который расширяет Application
и перемещает ваш код инициализации в переопределенный onCreate
метод внутри этого класса.
public class MyApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
// TODO Put your application initialization code here.
}
}
Класс onCreate
в приложении вызывается только при создании всего приложения, поэтому действие перезапускается при изменении ориентации, иначе изменения видимости клавиатуры не вызовут его.
Хорошей практикой является представление экземпляра этого класса как одиночного и предоставление переменных приложения, которые вы инициализируете, с помощью методов получения и установки.
ПРИМЕЧАНИЕ. Вам нужно будет указать имя вашего нового класса приложения в манифесте, чтобы он был зарегистрирован и использован:
<application
android:name="com.you.yourapp.MyApplicationClass"
Реакция на изменения конфигурации [ОБНОВЛЕНИЕ: это устарело с API 13; см. рекомендуемый вариант ]
В качестве дополнительной альтернативы вы можете заставить ваше приложение прослушивать события, которые могут вызвать перезапуск - например, изменения ориентации и видимости клавиатуры, - и обрабатывать их в вашей деятельности.
Начните с добавления android:configChanges
узла в узел манифеста вашей деятельности
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
или для Android 3.2 (уровень API 13) и новее :
<activity android:name=".MyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name">
Затем в Activity переопределите onConfigurationChanged
метод и вызовите, setContentView
чтобы принудительно сделать макет графического интерфейса в новой ориентации.
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.myLayout);
}