Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag

startActivity时错误信息提示:

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的类中使用了startActivity()方法,如果使用acitvity中的startActivity是没有一点问题的

解决方法:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(intent);


补充学习:

1. FLAG_ACTIVITY_NEW_TASK

    当Intent对象包含这个标记时,系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskActivity,将目标Activity放置于此task。注意,如果同一个应用中Activity的taskAffinity都使用默认值或都设置相同值时,应用内的Activity之间的跳转使用这个标记是没有意义的,因为当前应用task就是目标Activity最好的宿主


2. singleTask 和 onNewIntent

     如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中(此时不会调用onNewIntent())


    比如Activity启动顺序为:A--->B---->C------>A,其中A启动模式设置为android:launchMode="singleTask" ,当C跳转到A时,A将不再执行onCreate方法,走的是onNewIntent方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值