1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > BroadcastReceiver 启动activity(在activity之外启动一个activity)

BroadcastReceiver 启动activity(在activity之外启动一个activity)

时间:2021-04-05 15:09:40

相关推荐

BroadcastReceiver 启动activity(在activity之外启动一个activity)

*** 在BroadcastReceiver中启动Activity的问题** 如果在BroadcastReceiver的onReceive()方法中如下启动一个Activity* Intent intent=new Intent(context,AnotherActivity.class);* 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(上下文环境)之外调用startActivity()方法时* 需要给Intent设置一个flag:FLAG_ACTIVITY_NEW_TASK** 所以在BroadcastReceiver的onReceive()方法中启动Activity应写为:* Intent intent=new Intent(context,AnotherActivity.class);* intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);* context.startActivity(intent);*** 之前描述了问题的现象和解决办法,现在试着解释一下原因:* 1 在普通情况下,必须要有前一个Activity的Context,才能启动后一个Activity* 2 但是在BroadcastReceiver里面是没有Activity的Context的* 3 对于startActivity()方法,源码中有这么一段描述:* Note that if this method is being called from outside of an* {@link android.app.Activity} Context, then the Intent must include* the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag. This is because,* without being started from an existing Activity, there is no existing* task in which to place the new activity and thus it needs to be placed* in its own separate task.* 说白了就是如果不加这个flag就没有一个Task来存放新启动的Activity.** 4 其实该flag和设置Activity的LaunchMode为SingleTask的效果是一样的*** 如有更加深入的理解,请指点,多谢**/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。