Android初学习 - 在BroadcastReceiver中启动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的效果是一样的

    原文作者:myKernel
    原文地址: https://blog.csdn.net/cnmilan/article/details/50617802
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞