在BroadcastReceiver中启动Activity的问题

简介: /** * Demo描述: * 在BroadcastReceiver中启动Activity的问题 * * 如果在BroadcastReceiver的onReceive()方法中如下启动一个Activity * Intent intent=new Intent(context,AnotherActivity.
/**
 * 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的效果是一样的
 * 
 * 
 * 如有更加深入的理解,请指点,多谢
 * 
 */

相关文章
|
6月前
|
XML 监控 Android开发
Activity详解2
Activity详解
83 1
|
6月前
|
存储
Activity详解1
Activity详解
62 0
|
存储 SQL 人工智能
Android Activity启动流程一:从Intent到Activity创建
Android Activity启动流程一:从Intent到Activity创建
|
6月前
|
前端开发 Java Android开发
Activity
Activity
113 0
|
6月前
fragment启动activity方法
fragment启动activity方法
51 1
|
传感器 存储 定位技术
Activity初学乍练
Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作,比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口,而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!
|
Java 调度 Android开发
Activity登堂入室
Activity调用startActivity后最后会调用attach方法,然后在PolicyManager实现一个Ipolicy接口,接着实现一个Policy对象,接着调用makenewwindow(Context)方法,该方法会返回一个PhoneWindow对象,而PhoneWindow是Window的子类,在这个PhoneWindow中有一个DecorView的内部类,是所有应用窗口的根View,即View的老大,直接控制Activity是否显示(引用老司机原话..),好吧,接着里面有一个LinearLayout,里面又有两个FrameLayout他们分别拿来装ActionBar和Cus
100 0
|
XML Java Android开发
第二讲 Activity详解
第二讲 Activity详解
200 0
第二讲 Activity详解
|
安全 Android开发
Android四大组件之BroadcastReceiver(三)
接下来讲一下有序广播中对广播的拦截、有序广播与标准广播的区别、广播的安全性问题
219 1
|
Java Android开发
Activity的四种启动模式
Android的冷门知识,大家有兴趣可以了解了解
190 0