最近写的一个模块 页面返回重复 返回调用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" />