Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用 Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task,遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是,加一个flag。intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
修改后代码如下:
Intent intent = new Intent(); intent.setClass(mContext, PhotoView.class); Bundle bundle = new Bundle(); intent.putExtras(bundle); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent);
参考文章:http://www.cnblogs.com/shaweng/archive/2012/06/29/2570394.html
这个是我写在Util工具类的一个方法,用于SetttingActivity extends BaseActivity这个页面调用的,我在基类里面重新写了startActivity方法
1.如果我给context传递的对象是SetttingActivity.this 这个对象,实际上调用的就是SettingActivity的startActivity的方法,也就是到它的基类里面的startActivity方法(已经验证)
2.如果我给conetxt传递的对象是app Conetxt 全局对象,实际上也并不是一个SettingActivity对象了,那么它就调用不到它的基类里面的startActivity方法了(已经验证)
public static void startAboutActivity(Context context){ Intent intent3 = new Intent(context, AboutActivity.class); try { intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent3); }catch (Exception e){ e.printStackTrace(); } }