activity启动之后获取不到上个页面传过来的intent

比如AAcitvity中:

    Intent intent = new Intent(AAcitvity.this,BActivity);
    intent.put("data",data);
    startActivity(intent);  

而后我们在B中通过getIntent()方法获取intent,一般情况下我们都可以正常的获取到intent,并从中获取数据,但是有时候我们虽然拿到了intent,但是数据确实没有的,感觉很奇怪。

首先说下分析的结论
当我们用startActivity(intent)方法开启一个新的activity的时候,intent总是能正常获取到的,但是如果开启一个已经存在的activity,并且这个activity设置启动模式不是标准启动模式,比如是singleTask模式,那么我们启动的时候就不是新创建一个activity而是把之前activity的示例移到栈顶,这时候就会出现获取不到我们想要的intent中所传数据的情况。 
首先我们看下源码中getIntent方法的注释:

/** Return the intent that started this activity. */
    public Intent getIntent() {
        return mIntent;
    }

源码中注释说明:通过getIntent获取到的是activity创建时候的意图intent,并且会把这个意图保存下来,之后如果在activity从后台调出到前台,用getIntent方法获取到的始终是之前锁保存的意图。

解决方法
在要通过getIntent获取到intent的activity中重写如下方法:

//此方法在onResume之前执行
@Override
protected void onNewIntent(Intent intent) {
    //每次重新到前台就主动更新intent并保存,之后就能获取到最新的intent
    setIntent(intent); 
    super.onNewIntent(intent);
}

分析
下面是setIntent的源码及注释:

/**
     * Change the intent returned by {@link #getIntent}.  This holds a
     * reference to the given intent; it does not copy it.  Often used in
     * conjunction with {@link #onNewIntent}.
     *
     * @param newIntent The new Intent object to return from getIntent
     *
     * @see #getIntent
     * @see #onNewIntent
     */
    public void setIntent(Intent newIntent) {
        mIntent = newIntent;
    }

由此可见:setIntent方法是专门修改通过getIntent方法所获取到的intent的。
 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值