У меня следующая проблема. После запуска приложение работает нормально - даже после изменения ориентации экрана. Приложение еще не подготовлено для обработки изменения ориентации (например, альтернативный макет и т. Д.), Поэтому отображается только повернутый макет по умолчанию, и все в порядке. Однако, когда я покидаю приложение, нажимая клавишу «Назад», меняю ориентацию и сразу после запуска приложения снова происходит сбой. После сбоя, если я снова запускаю приложение, оно работает хорошо, пока не произойдут ранее описанные обстоятельства, - а затем происходит сбой.
Я подключил устройство к компьютеру и запустил приложение в режиме отладки. После перезапуска выдается исключение еще до вызова onCreate. Вызов аварийного вызова:
Thread [<1> main] (Suspended (exception IllegalArgumentException))
WindowManagerImpl.removeViewImmediate(View) line: 262
Window$LocalWindowManager.removeViewImmediate(View) line: 436
ActivityThread.handleDestroyActivity(IBinder, boolean, int, boolean) line: 4022
ActivityThread.handleRelaunchActivity(ActivityThread$ActivityRecord, int) line: 4127
ActivityThread.access$2400(ActivityThread, ActivityThread$ActivityRecord, int) line: 136
ActivityThread$H.handleMessage(Message) line: 2183
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 143
ActivityThread.main(String[]) line: 5068
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 858
ZygoteInit.main(String[]) line: 616
NativeStart.main(String[]) line: not available [native method]
Я планирую обработать поворот экрана позже, но до тех пор я хочу, чтобы поведение по умолчанию работало правильно.
Я переопределил только метод onCreate Activity. У меня также есть пользовательский класс приложения, который создает экземпляр класса используемого движка:
public class ProCalcApplication extends Application
{
private Engine engine;
public ProCalcApplication()
{
super();
engine = new Engine();
}
public Engine getEngine()
{
return engine;
}
}
Как решить эту проблему?
Я провел еще несколько испытаний. Я закомментировал весь код, оставив только реализацию по умолчанию метода onCreate (super () + setContentLayout ()). Проблема осталась, поэтому я закомментировал весь макет XML, и приложение, наконец, перестало падать. Я нахожусь в процессе зацепления ошибочной записи, пожалуйста, подождите;)
Я нашел причину, но пока не нашел решения. Неисправный XML-код выглядит следующим образом:
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<android.gesture.GestureOverlayView android:id="@+id/gestureOverlay" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="3">
<ViewFlipper android:id="@+id/contextArea" android:layout_width="match_parent" android:layout_height="match_parent">
</ViewFlipper>
</android.gesture.GestureOverlayView>
</LinearLayout>
Может кто-то попытается доказать или опровергнуть, что этот код не работает в описанных обстоятельствах? Или укажите, где я ошибся;)
Моя среда: HTC Desire Z (2.2.1), API 8 используется. Версия Eclipse: Helios Service Release 2
Идентификатор сборки: 20110218-0911.
Редактировать: сделать его немного короче:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<ViewFlipper android:id="@+id/contextArea" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="3">
</ViewFlipper>
</LinearLayout>
И еще немного информации; API 8 в эмуляторе: два изменения ориентации экрана (Ctrl + F12) и сбой приложения. API 10 в эмуляторе: два изменения ориентации экрана, и экран остается в горизонтальном режиме независимо от ориентации (хотя приложение не аварийно завершает работу).
Что я пропустил?