您的位置:首页 > 其它

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

2015-12-30 10:45 477 查看

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的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息