安卓页面跳转使用Context.startActivity注意事项

本文详细解释了在Android开发中使用Context启动Activity时遇到的异常情况,并提供了具体的解决方案。通过对比Activity与Context的startActivity方法,指导如何正确设置Intent标志以避免任务栈问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因是:

  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();
 }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值