在BroadcastReceiver中启动Activity的问题
发布日期:2021-06-30 11:16:20 浏览次数:2 分类:技术文章

本文共 1371 字,大约阅读时间需要 4 分钟。

/** * 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的效果是一样的 *  *  * 如有更加深入的理解,请指点,多谢 *  */

转载地址:https://it9527.blog.csdn.net/article/details/41706279 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:unbindService()导致应用Crash的问题
下一篇:得到所有Activity和Service

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月21日 09时26分53秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章