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

在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()获取数据就没问题了。

猜你喜欢

转载自blog.csdn.net/LVXIANGAN/article/details/81909820