Android 关闭多个Activity总结

来源:互联网 发布:标准差计算软件 编辑:程序博客网 时间:2024/06/05 05:53

  在项目中,有时候遇到一种情况,同时关闭多个activity,它们有的是单一的层次调用关系,但也有的是多个activity调用同一个activity。比如有两个Activity,A和B,在业务上A和B都会跳转到C,C又跳转到了D,这样子A和B->C->D的层次关系,现在如果要关闭D的同时关闭C并刷新A和B,如果是其它的平台可能会在D里面的到D的调用者C,而android系统本身机制目前不具有这样的功能,也不需要,因为在Activity之间可以传递参数,对于上面的情况不同的开发人员可能会采取不同的方式:

一,采用startActivityForResult的方式打开D,这样子在D处理结束后会返回到C,在C的OnActivityResult里面可以关闭当前页面;(这里要注意一点,在关闭D页面调用finish()方法之前执行setResult方法,如果放在finish后执行则setResult不会执行,返回到C页面的也只是resultCode是默认值0)


二,将上一级Activity的instance带到D页面,或者让上一级Activity的对象让下一级页面可以获取到,比如在上一级页面里面讲instance定义为一个static的对象,这样每次create这对象就会将instance赋值为当前的对象,然后D页面就可以获取,并作出处理。但个人认为这个不是理想的做法,对象管理太乱。


三,使用Intent.FLAG_ACTIVITY_CLEAR_TOP,在关闭的页面中跳转到要跳转的页面,并设置intent的flag值为FLAG_ACTIVITY_CLEAR_TOP,这样在要跳转的页面对象栈以上的Activity都会被pop出去。如果在D页面关闭所有页面包括mainactivity即退出程序,可以在栈底的页面中override OnNewIntent方法,

在该方法里重写


if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {
finish();
}

并将该Activity的启动模式设置为SingTop模式,保证这个Activity是永远处于栈底的。这里还要注意OnNewIntent方法的执行条件,可以自己百度一下。


四,通过广播机制,这个有点过于复杂


五,自己定义Activity Stack来管理真个应用的Activity的生命周期。


0 0