调用context.startActivity(intent)方法,报错如下:
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
分析:Activity继承自Context,查看Context.startActivity(Intent, Bundle),下图是该方法注释的一部分:
Context.png
翻译一下:注意,如果这个方法被一个不是Activity的Context调用,那么这个Intent必须包括Intent.FLAG_ACTIVITY_NEW_TASK这个flag。这是因为,如果不是被一个已存在的Activity启动,就没有已存在的栈去替换新的Activity,所以需要让它在自身的栈中。
就是说,如果这个context不是Activity,那么该Intent就必须执行Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)这个方法,让新Activity在它自身的栈中。