(转载)activity外部调用startActivity的new task异常解析
activity外部调用startActivity的new task异常解析
泡在网上的日子 / 文 发表于2013-09-07 12:45 第1314次阅读
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!
我现在需要在点击listview的某个item的时候启动一个activity,因为我的listview不在activity中,所以为了简便我直接用context来调用activity,如下:
- Intent intent = new Intent(view.getContext(), BlogDetail.class);
- intent.putExtra("blog_id", blog.getId());
- view.getContext().startActivity(intent);
运行时却曝出如下错误:
Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
原因:Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是,加一个flag。
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
这样就可以再新的task里面启动这个Activity了。
但是我们并不提倡这样做,在不是必须要new task 的情况下尽量使用
- Intent intent = new Intent(OOXXActivity.this, ImageSwitcherActivity.class);
- OOXXActivity.this.startActivity(intent);
来启动一个新的acticity,不然acticity的history会乱套,并且在关闭应用时需要做更多的工作。