在项目开发过程中,遇到以下情况:在主界面activity A中跳转到登录界面activity B中,用户可以选择登录或者直接返回,登录需要刷新activity A ,直接返回则直接返回刚才的实例
。解决方法:
1、activity A设置为singletop,在其他页面返回A的时候在设置intent的flag标志位Intent.FLAG_ACTIVITY_CLEAR_TOP,这样会清除在task中位于A上面的activity,然后调用A的onNewIntetn(),恢复跳转前的实例。
2、如果需要刷新activity A,则在intent设置的时候将flag设置为Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_CLEAR_TASK;两个标志必须一起用,获取前后的taskid,会发现taskid相同,就是将原来的task重置了一遍,因为Intent.FLAG_ACTIVITY_NEW_TASK会优先查找是否存在和被启动的Activity具有相同的亲和性的任务栈。
如果只设置了Intent.FLAG_CLEAR_TASK,会发现并没有将task里面内容完全清除,而是创建了两个A,这个不理解为什么。。
3、不能单纯的设置activity A的加载模式为singletask,因为当你从A-》B的时候,按下Home键然后回来,会发现显示的是A,因为singleTask会默认执行Intent.FLAG_ACTIVITY_CLEAR_TOP,然后将task中B直接finish掉,让A显示在最前面。