一般我们是使用
Activity.startActivity()
来启动一个新的Activity,但如果是在非Activity中调用startActivity,则会出现下面的错误提示:
(比如说在使用BroadcastReceiver、Service、Application等context启动)
```
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
```
但这个错误比较神奇的地方,就是在Android7.0-Android8.x版本,如果你在非Activity调用`startActivity()`方法,是不会出现任何崩溃问题;
原因是官方代码判断逻辑有bug,导致崩溃问题没有出现..
总之记住一点:
非Activity启动activity,记得加上flag,如下代码:
```kotlin
val context = application
val intent = Intent(context, SplashActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
```
## 参考
- [每日一问:非 Activity.startActivity() 不加 Flag 也可能不崩溃 - 掘金](https://juejin.cn/post/6844903890148655117)
- [非Activity环境startActivity的正确姿势_从非activity拉起activity-CSDN博客](https://blog.csdn.net/ausboyue/article/details/90648170)
评论区