文章标题

来源:互联网 发布:泸州市网络问政 编辑:程序博客网 时间:2024/06/05 20:39

转自 http://blog.csdn.net/lfdfhl

    /**      * Demo描述:      * 在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的效果是一样的      *       *       * 如有更加深入的理解,请指点,多谢      *       */  
原创粉丝点击