activity启动之后获取不到上个页面传过来的intent解决方法
2015-12-30 10:45
477 查看
activity启动之后获取不到上个页面传过来的intent解决方法
比如AAcitvity中:Intent intent = new Intent(AAcitvity.this,BActivity); intent.put("data",data); startActivity(intent);
而后我们在B中通过getIntent()方法获取intent,一般情况下我们都可以正常的获取到intent,并从中获取数据,但是有时候我们虽然拿到了intent,但是数据确实没有的,感觉很奇怪。
首先说下分析的结论
当我们用startActivity(intent)方法开启一个新的activity的时候,intent总是能正常获取到的,但是如果开启一个已经存在的activity,并且这个activity设置启动模式不是标准启动模式,比如是singleTask模式,那么我们启动的时候就不是新创建一个activity而是把之前activity的示例移到栈顶,这时候就会出现获取不到我们想要的intent中所传数据的情况。首先我们看下源码中getIntent方法的注释:
/** Return the intent that started this activity. */ public Intent getIntent() { return mIntent; }
源码中注释说明:通过getIntent获取到的是activity创建时候的意图intent,并且会把这个意图保存下来,之后如果在activity从后台调出到前台,用getIntent方法获取到的始终是之前锁保存的意图。
解决方法
在要通过getIntent获取到intent的activity中重写如下方法://此方法在onResume之前执行 @Override protected void onNewIntent(Intent intent) { //每次重新到前台就主动更新intent并保存,之后就能获取到最新的intent setIntent(intent); super.onNewIntent(intent); }
分析
下面是setIntent的源码及注释:/** * Change the intent returned by {@link #getIntent}. This holds a * reference to the given intent; it does not copy it. Often used in * conjunction with {@link #onNewIntent}. * * @param newIntent The new Intent object to return from getIntent * * @see #getIntent * @see #onNewIntent */ public void setIntent(Intent newIntent) { mIntent = newIntent; }
由此可见:setIntent方法是专门修改通过getIntent方法所获取到的intent的。
相关文章推荐
- IntentFilter启动Activity
- 当从后台唤醒activity时,getIntent() 无法获取到最新的值 或者为空
- Activity常用技巧总结
- 启动其它程序Activity和Service
- 【android_温故知新】深入理解 Activity
- android Notification跳转 getIntent()问题
- Android启动关闭Activity
- Intent的普通跳转和带数据跳转(笔记)
- 打开第三方应用
- 利用onNewIntent方法传递参数
- 写一个循环启动app的bat脚本辅助monkey测试
- android之onNewIntent()用法
- getIntent和onNewIntent()的intent是一样的吗?
- android 启动Activity的四种模式
- Android6.0 AMS启动Activity(六) AMS与PKMS关系(通过Intent获取ActivityInfo)
- Android6.0 AMS启动Activity(五) 在新进程中启动Activity
- Android6.0 AMS启动Activity(四) AMS内部一些成员变量
- Android6.0 AMS启动Activity(三) 进程内部启动Activity
- has a relation with model <class '***'>, which has either not been installed or is abstract.