在BroadcastReceiver中启动Activity的问题
来源:程序员人生 发布时间:2014-12-23 08:08:18 阅读次数:2873次
/**
* Demo描写:
* 在BroadcastReceiver中启动Activity的问题
*
* 如果在BroadcastReceiver的onReceive()方法中以下启动1个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设置1个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下缘由:
* 1 在普通情况下,必须要有前1个Activity的Context,才能启动后1个Activity
* 2 但是在BroadcastReceiver里面是没有Activity的Context的
* 3 对startActivity()方法,源码中有这么1段描写:
* 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就没有1个Task来寄存新启动的Activity.
*
* 4 其实该flag和设置Activity的LaunchMode为SingleTask的效果是1样的
*
*
* 如有更加深入的理解,请指导,多谢
*
*/
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠