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

你可能感兴趣的:(安卓整理,android开发,activity,数据传递)