我的應用程序包含一個主要活動A和幾個其他活動B,C,D,E,這些活動只能通過菜單從主要活動A啓動。 例如,如果我在活動B中,然後單擊後退按鈕,則我總是回到主要活動A.在ICS和薑餅上啓動Android應用程序時出現的不同行爲
再次考慮我們處於活動B中,然後單擊主頁按鈕。然後,我有不同的行爲,點擊我的應用程序的啓動圖標時,返回到應用程序:
- 在薑餅(模擬器上測試)這個原因活動B到顯示和我能夠回去活性的是按下後退按鈕。
- 在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並選擇最初啓動Task A的應用程序。現在,Task A進入前臺 - 堆棧中的所有三個活動都保持不變,並且堆棧頂部的活動恢復。
這是我在我的模擬器(薑餅)上得到的行爲,但不是在我的Nexus S(ICS)上。
謝謝
如果你正在調用活動A「你的主要活動」,是否有理由將它聲明爲'singleInstance'? – Falmarri
@Falmarri因爲當我在2011年7月發佈應用程序時,所有工作都正常。我的薑餅模擬器的工作方式是根據[this]的正確方法(http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html) – DanGTZ
@Falmarri不要使用launchMode =「singleInstance」!這絕對不是你想要的。這會導致比解決問題更多的問題,而不是正確的解決方案 –