我的应用程序包含一个主要活动A和几个其他活动B,C,D,E,这些活动只能通过菜单从主要活动A启动。
例如,如果我处于活动B中,然后单击“上一步”按钮,那么我总是回到主活动A。
再次考虑,我们处于活动B中,然后单击“主页”按钮。然后,当我单击应用程序的启动图标以返回到应用程序时,我会有不同的行为:
在姜饼(在模拟器上测试)上,这导致活动B出现,而我可以通过按“后退”按钮返回活动A。
在ICS上,行为不同,这将导致启动新的活动A,如果我单击A中的“后退”按钮,则会返回到B。这不是预期的行为,对我而言,正确的是姜饼。
另一个示例,如果我处于主要活动A中,然后单击“主页”按钮。然后单击启动图标:
在姜饼上,这导致活动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上的姜饼行为?
根据Android Developers site,预期如下:
例如,假设当前任务(任务A)在其堆栈中具有三个活动-当前活动下有两个活动。用户按下“主页”按钮,然后从应用程序启动器启动新应用程序。当出现主屏幕时,任务A进入后台。当新应用程序启动时,系统会使用自己的活动堆栈启动该应用程序的任务(任务B)。与该应用程序进行交互之后,用户再次返回Home并选择最初启动任务A的应用程序。现在,任务A成为前台-堆栈中的所有三个活动均保持不变,堆栈顶部的活动恢复。
这是我在模拟器(Gingerbread)上出现的行为,而在Nexus S(ICS)上却没有。
谢谢
最佳答案
我将假设您最初(第一次)从IDE(例如Eclipse或IntelliJ)启动了该应用程序,或者使用安装程序安装了该应用程序(从市场或浏览器或在文件浏览器中单击APK)。如果是这样,这是Android中的一个已知错误(请参见http://code.google.com/p/android/issues/detail?id=26658)。许多人为解决这个问题而苦苦挣扎了几天:-(
可在http://code.google.com/p/android/issues/detail?id=2373#c21中找到解决此问题的简单方法
要验证这是您的问题,请不要从IDE或安装程序中启动它。只需安装该应用程序,然后从可用应用程序列表中启动它即可。
该错误存在于所有设备上,并且在所有版本的Android上(至少在ICS以上,尚未在JellyBean上进行测试)。这一切都可以在仿真器中正常进行,因此您不能使用仿真器行为来指示实际的设备行为。