分享

android onnewintent()函数的使用

 风雪夜归人_95 2015-01-22
    今天在编程的时候,遇到这样的情况,一个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()函数,问题得到解决:
  onNewIntent(Intent intent) {
   .onNewIntent(intent);  
   setIntent(intent);
}

下面具体来分析一下逻辑。
第一次创建Activity A时,执行的逻辑顺序是:onCreate() --->onStart()--->onResume()。
而如果使用“singleTask”模式第二次启动Activity A,且A处于任务栈的顶端,则执行的逻辑顺序是:
onNewIntent() ---> onRestart() --->onStart() ---> onResume()。
通过Intent来再次启动A时,由于系统已经存在一个实例,喜用就会将请求发送到这个实例上。此时,系统不会再调用通常情况下处理请求数据的onCreate()方法,而是调用onNewIntent()方法。

所以,如果遇到了和我上面类似的问题,一个办法就是在onCreate()函数和onNewIntent方法中嗲用相同的处理数据的方法:
   onCreate(Bundle savedInstanceState) {
   .onCreate(savedInstanceState);
   setContentView(R.layout.main);
   Intent intent = getIntent();
   ......
 }

  onNewIntent(Intent intent) {
   .onNewIntent(intent);
   setIntent(intent);   Intent intent = getIntent();
   ......
 }

当然,你也可以把二者相同的处理放到onResume()函数中,反正后面都要调用这个函数,避免同样的代码写2次。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多