1.返回键和自定义返回键保持一致。
重写public boolean onKeyDown(int keyCode, KeyEvent event)函数
2 .<activity android:name="xxx"
android:launchMode="xx" >中的android:launchMode属性值,严重影响Activity在task栈中的存储方式。
</activity>
>弄清楚Standard(默认)和singleTask的区别,这个在用到startActivityForResult时差别特别大。在Standard下才能回传成功。(个人理解貌似连个activity必须在同一个task中,才能回传成功,而且必须相邻。否则不能传递失败值。还没启动下一个Activity就接受到了失败值返回码。)
3.对于singleTask:(实践总结)
(1)ABCD
ABCD全是singleTask,从D返回C,再从C启动D,发现D已存在,结果回到D,但是D页面的数据没有刷新。
》由此可见,从D按返回键返回到C时没有销毁掉D。
》若从D返回C,再从C启动D时,设置DIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
发现D时新数据,说明是新创建的。
由此可以解决singleTask按返回键,返回再重新打开页面刷新数据的问题。
(2)每次由A打开B,是否要finish掉A的问题
》这涉及到点返回按钮,界面回到哪的问题以及刷新数据的问题
》若每次finish掉A,重写返回按钮事件,B返回重新打开A时,可以解决数据刷新的问题。不过每个页面需重写返回按钮事件,有时分多种情况。
(3)startActivityForResult:在Standard下能回传成功结果,(个人理解貌似连个activity必须在同一个task中,才能回传成功,而且必须相邻。在singleTask下,不在同一个task中,只能回传失败结果值。否则不能传递失败值。还没启动下一个Activity就接受到了失败值返回码。)
5
(1)A>B>C:
C返回B的时候,如何刷新数据?
(1
方法:重写返回操作,打开B,关闭C。即A>B。
(2
方法:startActivityForResult(android:launchMode属性值为Standard时,不能为singleTask)
(2)A>B>C:
B启动C的时候finish(),
A>C
问题: 返回的时候如何启动新的B?
方法:重写返回操作,打开B,栈移除C。即A>B。