我的问题与以下用户行为有关:
- 打开应用程序
- 关闭应用程序(使用后退按钮)
- 从纵向旋转到横向(或从横向到纵向)
- 打开应用程序
当应用程序第二次打开时,onCreate
由于屏幕方向发生了变化,该方法被执行了两次。
我做了一些测试,似乎问题只发生在运行版本早于 Android 3.0 的设备上(我没有测试每个版本)。
在我运行 Android 4.0 的平板电脑上,应用程序在第二次启动时以正确的初始方向打开,导致该onCreate
方法仅被调用一次。但是在我运行 Android 2.3.5 (HTC Desire HD) 的手机上,第二次启动会以错误的方向打开前一个 Activity 实例,导致重新启动并执行 2 次主要 Activity 的onCreate
方法。
我已阅读任务和返回堆栈 | Android 开发人员android:launchMode
并尝试在主要活动上使用、android:clearTaskOnLaunch
等的各种组合。但这似乎不是诀窍。
有什么建议么?从 Android 2.0 到 3.0 是否对使用“后退”按钮退出应用程序的方式进行了任何更改?还是仅在某些设备上发生这种情况,与 Android 版本无关?
活动:
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(getClass().getName(), "onCreate");
setContentView(R.layout.main);
}
}
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, MyActivity" />
</LinearLayout>
显现:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="7"/>
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<activity android:name="MyActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>