今天在编程的时候,遇到这样的情况,一个Activity A跳转到另一个Activity B(Activity A并没有被finish掉),B处理完后,将一些值通过Intent重新传回给Activity A。在这里笔者并没有使用startActivityforResult函数,而是简单地使用startActivity函数。并且Activity A在Androidmanifest.xml文件中将启动模式设置为“singleTask”。但是,再次回到Activity A时使用Intent获取B传过来的值时无法获取。不知道是什么原因。因为再次回到A时,不会执行onCreate()函数,所有把从Intent中获取值的过程放到了onResume()函数中。http://www.360doc.com/writeart3.aspx 经过网上的查询,在A中添加了onnewintent()函数,问题得到解决:
下面具体来分析一下逻辑。 第一次创建Activity A时,执行的逻辑顺序是:onCreate() --->onStart()--->onResume()。 而如果使用“singleTask”模式第二次启动Activity A,且A处于任务栈的顶端,则执行的逻辑顺序是: onNewIntent() ---> onRestart() --->onStart() ---> onResume()。 通过Intent来再次启动A时,由于系统已经存在一个实例,喜用就会将请求发送到这个实例上。此时,系统不会再调用通常情况下处理请求数据的onCreate()方法,而是调用onNewIntent()方法。 所以,如果遇到了和我上面类似的问题,一个办法就是在onCreate()函数和onNewIntent方法中嗲用相同的处理数据的方法:
当然,你也可以把二者相同的处理放到onResume()函数中,反正后面都要调用这个函数,避免同样的代码写2次。 |
|