我有一个问题。在启动后,应用程序运行良好 - 即使更改屏幕方向也是如此。该应用程序尚未准备处理方向更改(例如,备用布局等),因此只会显示旋转的默认布局,这很好。但是,当我按下返回键离开应用程序,更改方向并立即重新启动应用程序时,它会崩溃。崩溃后,如果我再次启动应用程序,则在先前描述的情况发生时它会崩溃。
我已将设备连接到计算机并以调试模式运行应用程序。重启后,在调用onCreate之前就会抛出异常。崩溃调用堆栈如下:
我计划稍后处理屏幕旋转问题,但在此期间,我希望默认行为能够正确工作。
我只覆盖了onCreate Activity的方法。我还有一个自定义的应用程序类,它创建了一个应用程序范围内使用的引擎类的实例:
我已将设备连接到计算机并以调试模式运行应用程序。重启后,在调用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 Build id: 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进行两次屏幕方向更改后,屏幕始终处于横向模式,而不管其方向如何(尽管应用程序不会崩溃)。
我错过了什么?