Activity以singleTask模式启动,intent传值的解决办法
来源:互联网 发布:淘宝卖家后台官网 编辑:程序博客网 时间:2024/05/22 14:46
转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/46557827
因为项目中,有一个消息推送的功能,每次推送一个消息,就会开启FunctionActivity,那么为了避免重复开启它,在退后的时候,多次出现该Activity,就将该Activity的启动模式变为singleTask。
这样在之后的多次启动该Activity,便会调用onNewIntent(Intent intent)方法。
activity通过intent传递数据的时候,如果activity未启动,那么在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.如果要启动的activity是已经存在的,这时候通过getInten()方法获取到的intent是已启动的activity的原始intent.换句话说intent的数据没有更新.这样在已启动的activity里拿到的intent的数据是旧数据.如果要每次获取intent传来的新数据就需要在onNewIntent(Intent intent)方法里调用setIntent(intent)设置这个传来的最新的intent.如下所示:
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- Log.e(”tag”, “onNewINtent执行了”);
- setIntent(intent);
- String ringName = intent.getStringExtra(”ringName”);
- Log.e(”tag”, ringName+“传过来的值”);
- if (ringName != null) {
- pager.setCurrentItem(1);
- }
- }
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.e("tag", "onNewINtent执行了"); setIntent(intent); String ringName = intent.getStringExtra("ringName"); Log.e("tag", ringName+"传过来的值"); if (ringName != null) { pager.setCurrentItem(1); } }
当然,如果activity的启动模式是standard,那么每次都重新创建一个新的activity.这样intent也是最新的.就不用通过setIntent来更新这个intent.
我这个项目中,FunctionActivity中里面是四个Fragment,这样我从其他Activity跳转到FunctionActivity是不会实例化,通过getIntent()方法也不能获得最新的intent,为了解决这个办法。还是在onNewIntent方法中,将更新的intent通过getIntent().putExtras(intent);共享出去,如下所示:
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- Log.e(”tag”, “onNewINtent执行了”);
- setIntent(intent);
- getIntent().putExtras(intent);
- }
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.e("tag", "onNewINtent执行了"); setIntent(intent); getIntent().putExtras(intent); }
这样在与它关联的Fragment中,就可以调用
- @Override
- public void onResume() {
- super.onResume();
- // 第一次进入这个页面,下面的方法是不会执行的,因为ringName是null
- String ringName = getActivity().getIntent().getStringExtra(”ringName”);
- if (ringName != null) {
- newSound.setText(ringName);
- Log.e(”tag”, ringName + “要保存的值”);
- SharedPreferenceUtil.setString(getActivity(),
- SharedPreferenceUtil.RINGTONE_NAME, ringName);
- }
- }
@Override public void onResume() { super.onResume(); // 第一次进入这个页面,下面的方法是不会执行的,因为ringName是null String ringName = getActivity().getIntent().getStringExtra("ringName"); if (ringName != null) { newSound.setText(ringName); Log.e("tag", ringName + "要保存的值"); SharedPreferenceUtil.setString(getActivity(), SharedPreferenceUtil.RINGTONE_NAME, ringName); } }
注意,这里Fragment调用的时候,一定要在onResume方法中。
- Activity以singleTask模式启动,intent传值的解决办法
- Activity以singleTask模式启动,intent传值的解决办法
- Activity以singleTask模式启动,intent传值的解决办法
- Activity以singleTask模式启动,intent传值的解决办法
- Activity以singleTask模式启动,intent传值的解决办法
- Activity以singleTask模式启动,intent获取到的值为null的解决办法
- 添加了SingleTask 启动模式的Activity Intent传值的问题
- android 设置activity启动模式为singleTask时,intent的传值问题
- Activity已singleTask启动,intent传值得解决办法
- Intent传递数据与Activity启动模式singleTask的关系。
- Activity的启动模式singleTask
- SingleTask模式的Activity接受Intent注意事项
- activity开启一个启动模式为SingleTask的activity,intent传递数据为空的解决方法
- Activity的启动模式变singleTask时,如何使用Intent传值
- "singleTask"启动模式的Activity的特点
- 关于activity的singletask启动模式记录
- Activity启动模式singleTask的理解
- 广播或者activity跳转singleTask模式的 Activity Bundle和intent参数值为null
- express框架的注册登陆
- Cannot read property 'length' of undefined
- 移动开发UI工具包Xamarin.Forms v2.3.5-pre6发布
- 英伟达CUVID硬解,并通过FFmpeg读取文件
- NOIP2015 Day 1 T3 斗地主
- Activity以singleTask模式启动,intent传值的解决办法
- LeetCode
- OpenCV之VideoCapture的使用——打开网络摄像头/图像序列
- FAQ页面设计
- okHttp的使用
- 百度2017春招笔试真题编程题集合
- L
- 本地项目提交到SVN
- Mysql Int、Datetime 和 Timestamp 时区相关性分析