我的应用程序包含一个主要活动 A 和其他几个活动 B、C、D、E,它们只能通过菜单从主要活动 A 启动。例如,如果我在活动 B 中并单击“返回”按钮,那么我总是会回到主要活动 A。
再次考虑我们在活动 B 中,我单击主页按钮。然后,单击我的应用程序的启动图标返回应用程序时,我有不同的行为:
- 在 Gingerbread 上(在模拟器上测试)这会导致活动 B 显示,我可以通过按下后退按钮返回到活动 A。
- 在 ICS 上,行为是不同的,这会导致新的活动 A 开始,如果我单击 A 中的后退按钮,然后我会回到 B。这不是预期的行为,对我来说正确的是姜饼。
另一个例子,如果我在主要活动 A 中并单击主页按钮。然后我点击启动图标:
- 在 Gingerbread 上,这会导致活动 A 恢复。因此,如果我单击后退按钮,我就存在于应用程序中。
- 在 ICS 上,这会导致创建一个新的活动 A。所以如果我点击后退按钮,我会回到上一个活动 A,我必须再次点击 A 才能退出。
这是 manisfest.xml 内容:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="10"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"/>
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".B"
android:configChanges="orientation"
android:screenOrientation="portrait">
</activity>
<activity
android:name=".C"
android:configChanges="orientation"
android:screenOrientation="landscape">
</activity>
<activity
android:name=".D"
android:configChanges="orientation"
android:screenOrientation="landscape">
</activity>
<activity
android:name=".E"
android:configChanges="orientation"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="com.perfexpert.intent.ACTIVITY_E" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".A"
android:configChanges="orientation"
android:screenOrientation="portrait"
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>
以及用于从主要活动开始活动的代码:
startActivityForResult(new Intent(this, B.class), REQUEST_CODE_B);
为什么我在 ICS 上有这种不同的行为?如何在 ICS 上获得 Gingerbread 行为?
根据Android Developers 网站,预期如下:
例如,假设当前任务(任务 A)在其堆栈中有三个活动——两个在当前活动之下。用户按下 Home 按钮,然后从应用程序启动器启动一个新应用程序。当主屏幕出现时,任务 A 进入后台。当新应用程序启动时,系统会为该应用程序启动一个任务(任务 B),并使用它自己的活动堆栈。与该应用程序交互后,用户再次返回 Home 并选择最初启动任务 A 的应用程序。现在,任务 A 进入前台——其堆栈中的所有三个活动都完好无损,堆栈顶部的活动恢复。
这是我在模拟器(姜饼)上得到的行为,但在我的 Nexus S(ICS)上却没有。
谢谢