最近寫的一個模塊 頁面返回重複 返回調用finish 和重寫Ondestroy 有一頁面返回需調用兩次finish(); 最後發現是ACtivity啓動方式不好 修改爲android:launchMode="singleTask" 問題解決
業務邏輯:
跳轉C>A>B 返回B>A>C
跳轉C>A>D>E 返回E>D>>C C頁面返回主頁面重複
究其原因是 Activity默認啓動方式爲Standard
standard 模式:
如果有3個 Activity,Act1,Act2,Act3, 如果從Act1 啓動到Act2 ,在啓動到Act3,那麼Android 的任務棧(task stack)分別爲 Act1、Act2、Act3,Act3 在棧頂,如果此時按手機返回鍵,則需要返回3次才能返回到桌面(假設是從桌面啓動的demo),任務棧分銷燬掉 Act3,Act2,最後Act1 。
SingleTask 操作模式,一般和singleTop操作模式類似,如果他發現任務棧裏面已經有了要啓動的這個Activity,他會清空這個Activity所在的任務棧上面的所有Activiy,然後直接複用這個已經存在的Activity 。
代碼ACTIVITY
<activity
android:name=".ui.A"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustUnspecified|stateHidden"/>
<activity
android:name=".ui.B"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustUnspecified|stateHidden" />
<activity
android:name=".ui.C"
android:launchMode="singleTask"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustUnspecified|stateHidden" />
<activity
android:name=".ui.D"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustUnspecified|stateHidden" />
<activity
android:name=".ui.E"
android:alwaysRetainTaskState="true"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustUnspecified|stateHidden" />