我的应用程序包含一个主要活动A和其他几个活动B,C,D,E,它们只能通过菜单从主活动A启动。 例如,如果我在活动B中并且单击“后退”按钮,那么我总是回到主要活动A.
再次考虑我们在活动B中,然后单击“主页”按钮。然后,当我点击我的应用的启动图标以返回应用时,我有不同的行为:
另一个例子,如果我在主要活动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 site预期如下:
例如,假设当前任务(任务A)在其堆栈中有三个活动 - 在当前活动下有两个活动。用户按下Home按钮,然后从应用程序启动器启动新应用程序。出现主屏幕时,任务A进入后台。当新应用程序启动时,系统会为该应用程序(任务B)启动一个具有自己的活动堆栈的任务。在与该应用程序交互之后,用户再次返回Home并选择最初启动任务A的应用程序。现在,任务A到达前台 - 其堆栈中的所有三个活动都是完整的,并且堆栈顶部的活动将恢复。 / p>
这是我在我的模拟器(Gingerbread)上获得的行为,但不是我的Nexus S(ICS)上的行为。
由于
答案 0 :(得分:0)
据我所知,这里的ICS应该没有不同的行为。 我唯一能想到的是破坏活动的新开发者选项。 根据你的描述,似乎你已经开启了它。
立即销毁活动
告诉系统销毁活动 一旦它停止(好像Android必须回收内存)。这个 对于测试onSaveInstanceState(Bundle)非常有用 onCreate(android.os.Bundle)代码路径,否则将是 很难逼。选择此选项可能会显示一个数字 因未保存状态而导致应用程序出现问题。更多 有关保存活动状态的信息,请参阅活动 文档。
http://developer.android.com/guide/developing/debugging/debugging-devtools.html
编辑:但这并不能解释下面的引用。
在ICS上行为不同,这会导致新的活动A开始 如果我点击A中的后退按钮,那么我会回到B.
答案 1 :(得分:0)
我将假设您最初(第一次)从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上测试过)。它在模拟器中都能正常工作,因此您无法使用模拟器行为来指示实际的设备行为。