我们启动Activity,都会用到Intent,Intent需要传入Context参数,通常我们在Activity中使用Intent时,都会传入Activity的实例作为Context。但由于考虑到内存泄漏的风险以及在非Acitivty中启动Activity(比如Service中),大都提倡使用ApplicationContext,所以很多同学就把Activity类型的Context换成了ApplicationContext,这时就发现,突然不能正常启动Activity了,并且收到如下的错误。
Calling startActivity() from outside of an Activity
context requires the FLAG_ACTIVITY_NEW_TASK flag.
Is this really what you want?
意思就是,启动外部的Activity,需要FLAG_ACTIVITY_NEW_TASK标识。
但是,又有很多同学说,我这里不加这个标识,不会报错,可以正常运行。
说的都对,关键问题是Google的安卓工程师出了错误,在7.0(Android N)之前,不加这个标识是不行的。
getApplicationContext().startActivity执行的是ContextWrapper的方法。