您的位置:首页 > 其它

Acitivity在singleTask加载模式下的数据传递处理

2015-02-28 09:54 197 查看
在Android开发中,我们通常要在不同页面之间传递数据,比如要从ActivityA启动ActivityB并传递数据到ActivityB里面,这个很简单,用Intetn加Bundle就可以了。不过有时候如果您需要让后台运行的Activity回到前台并传递数据就有些问题。

通常,我们通过Intent启到Activity的时候,就算存在一个相同的正在运行的Activity,系统都会创建一个新的Activity实例并显示出来。此时我们最好就是让Activity不启动多次,通过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式(
android:launchmode
=
"singleTask"
)。singleTask的时候,启到一个ActivityA,如果系统已经存在ActivityA实例,系统就会直接启动ActivityA。然而这个时候,系统不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:

protected void onNewIntent(Intent intent) {

super.onNewIntent(intent);

setIntent(intent);

//处理数据,data=getIntent().get.....

}

不过有的时候,系统可能会随时杀掉运行在后台的 Activity ,那么系统启动ActivityA时还会调用 onCreate 方法,而不调用 onNewIntent 方法。这个时候又怎么处理呢?通常就是在 onCreate 和 onNewIntent 方法中调用同一个处理数据的方法,这样就可以解决问题。

注意:

protected void onNewIntent(Intent intent) {

super.onNewIntent(intent);

setIntent(intent);

//处理数据,data=getIntent().get.....

}

在上面这个方法中,如果没有调用setIntent(intent),则getIntent()获取的数据将不是你所期望的。所以最好是先调用setIntent(intent),这样再调用getIntent()获取数据就没问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: