android start activity getIntent 返回异常的问题
2014-08-26 21:17
501 查看
前两天在写android应用的时候发现一个诡异的现象,我使用startActivity的时候往intent中传递了一些extra参数,但是在目标activity中getIntent的时候发现从intent里面拿不出我之前放进去的参数,最初以为是设置的问题,但试过了各种方法都不奏效,陷入迷茫中。于是google了一下相关的文章,发现一个有意思的分享一下。
在一个activity的生命周期中,它getIntent得到的intent都是第一次启动这个activity的时候拿到的intent。也就是说如果一个activity在按home隐藏之后,如果再使用start activity传递一个intent进去,那么这这个activity里面get的时候返回的仍然是第一次的那个intent。不是很理解android为什么这样做,不过倒也发现了一个解决方案,那就是使用onNewIntent.
在activity中重载onNewIntent,这个方法的传入参数是一个intent,这就是新传入进来的intent,然后在onNewIntent的方法里面调用setIntent方法,将获取到的intent手动传递给activity,这样在后续的getIntent中就可以拿到新的intent了。值得一提的是,onNewIntent 方法可以保证在onResume之前被调用,所以getIntent的方法也最后在onResume里面使用。另外onNewIntent注释里写的针对singleTop这样的launchMode使用的,实际上对于singleInstance
和singleTask这样的launchMode也是可用的。
在一个activity的生命周期中,它getIntent得到的intent都是第一次启动这个activity的时候拿到的intent。也就是说如果一个activity在按home隐藏之后,如果再使用start activity传递一个intent进去,那么这这个activity里面get的时候返回的仍然是第一次的那个intent。不是很理解android为什么这样做,不过倒也发现了一个解决方案,那就是使用onNewIntent.
在activity中重载onNewIntent,这个方法的传入参数是一个intent,这就是新传入进来的intent,然后在onNewIntent的方法里面调用setIntent方法,将获取到的intent手动传递给activity,这样在后续的getIntent中就可以拿到新的intent了。值得一提的是,onNewIntent 方法可以保证在onResume之前被调用,所以getIntent的方法也最后在onResume里面使用。另外onNewIntent注释里写的针对singleTop这样的launchMode使用的,实际上对于singleInstance
和singleTask这样的launchMode也是可用的。
相关文章推荐
- 解决Android中Fragment(SherlockFragment)调用startActivityForResult返回requestCode错误的问题
- Android notification点击跳转到Activity,点击返回跳转,前一条消息目标Intent的值不被后面的消息覆盖,getActivities第二个参数必须区分开来
- android小知识之fragment中调用startActivityForResult(Intent intent,int requestcode)所遇到的问题
- 解决Android中Fragment调用startactivityforresult不能返回结果的问题
- 关于android 多个Activity应用程序按返回键退出程序问题
- Android startActivityForResult(intent, requestCode)的用法。
- 用startActivityForResult 所遇到的一个问题,返回时不执行onActivityResult
- [android]startActivityForResult 和 onActivityResult 问题
- Android:startActivityForResult 和 onActivityResult 问题
- android startActivityForResult(Intent intent, int requestCode) 整理与总结!
- Android实战总结之返回键返回上一级Activity(Intent的一种用法)
- Android中返回数据到前一个Activity — startActivityForResult方法
- android 利用startActivityForResult()方法得到另一个Activity的返回值
- PendingIntent android.app.PendingIntent.getActivity的使用
- Android:startActivityForResult 和 onActivityResult 问题
- [Android1.5]打开多个Activity,返回到第一个Activity的问题
- 解决通过Intent调用系统拍照程序,返回图片太小的问题[android]
- Android问题集锦之八:调用其他程序中的activity和Permission Denial: starting Intent 错误解决办法
- Android:startActivityForResult 和 onActivityResult 问题
- Android基础:startActivityForResult 和 onActivityResult 问题