关于SingleInstance使用的问题

SingleInstance是activity启动的一种模式,一般做应用层开发很少用到,我一般用到的app定时提醒会用到这个模式吧。这个模式使用起来有很多坑,假设有activityA,activityB,activityC这三个activity,我们将activityB设置为SingleInstance

第一种情况

    A开启B,B开启C,如果finish activityC,那么activityA会显示而不是我们想要的activityB,这是因为activityB和activityA、activityC所处的栈不同,C关闭了,就要显示C所处栈的下一个activity,解决这个问题办法很多,我自己用的方法是通过记录开启activity,在被关闭的activity的finish方法中重新开启activityB。

第二种情况

    A开启B,然后按home键,再从左面点开应用,显示的是A,这是因为launch启动我们应用的时候 会从默认的栈找到栈顶的activity显示,这个解决办法的思路跟第一种差不多,也就不献丑了

第三种情况

    A开启C,C开启B,B开启A,结果显示的是C,这还是两个栈造成的,B开启A的时候,其实是到达A所处的栈,栈顶是C,所以就显示C了,解决办法是用flag把默认栈activity清理了,重新开启A,或者回退到C时再开启A。

三种情况的解决方法都是基于页面少的情况,如果页面多了会产生更多的问题

为了必避免这个问题,最好不用在中间层使用SingleInstance

TIPS: (1)如果想让C和B同一个栈,那就使用taskinfinity,给他俩设置同样的栈名

        (2)onActivityResult不能与SingleInstance不能一起使用,因为不同栈



猜你喜欢

转载自blog.csdn.net/super_xiaojian/article/details/81027530