码迷,mamicode.com
首页 > 移动开发 > 详细

android常见问题

时间:2015-04-02 23:49:27      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

1、广播接收器中启动Activity,需要在intent中添加FLAG_ACTIVITY_NEW_TASK

/**
 * 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的效果是一样的
 * 
 * 
 * 如有更加深入的理解,请指点,多谢
 * 
 */
该flag和设置Activity的LaunchMode为SingleTask的效果是一样的,这里理解其实并不是非常准确

android常见问题

标签:

原文地址:http://www.cnblogs.com/CoolRandy/p/4388648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!