android 加入FLAG_ACTIVITY_NEW_TASK

    startActivity时报错 from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag    

    原因是Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法,如果使用Activity的startActivity方法,不会有任何限制;如果使用Context的startActivity方法,就需要开启一个新的task,遇到上面的异常,都是因为使用了Context的startActivity方法,并且没有添加flag--FLAG_ACTIVITY_NEW_TASK。解决方法是在跳转之前添加一个flag,Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)。

    可是在某些情况下,这样做虽然能解决报错问题,却并不能达到预期的效果,比如:

    Activity A  launchMode="singleTask"

    Activity B launchMode="singleTask"

    由A启动B,此时通过Context启动了一个新的Activity C(添加了FLAG_ACTIVITY_NEW_TASK),此时C肯定是位于栈顶,当C调用finish()后,预期应该回到B,可是此时却直接回到了A,是因为通过Context启动时添加了FLAG_ACTIVITY_NEW_TASK导致的。如果此时使用Activity启动C,就不会出现这样的问题,C finish后会回到B。

    如果要达到预期效果,就需要用到android:taskAffinity属性,在AndroidManifest中将C的taskAffinity配置成和B的taskAffinity一样的值,这样就会把C压入到B所在的栈中,这样就和不加FLAG_ACTIVITY_NEW_TASK标记的效果一致,既解决了错误,又能达到预期的效果。


    




猜你喜欢

转载自blog.csdn.net/visionliao/article/details/49279299