Использование класса приложения
В зависимости от того, что вы делаете при инициализации, вы можете рассмотреть возможность создания нового класса, расширяющего 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);
}