Activity以singleTask模式启动,intent传值的解决办法

转载请注明出处,谢谢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);
		}
	}

当然,如果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);
	}

这样在与它关联的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);
		}
	}

注意,这里Fragment调用的时候,一定要在onResume方法中。

时间: 2024-10-02 07:49:17

Activity以singleTask模式启动,intent传值的解决办法的相关文章

Activity以singleTask模式启动,intent传值的解决办法,singletaskintent

转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/46557827 因为项目中,有一个消息推送的功能,每次推送一个消息,就会开启FunctionActivity,那么为了避免重复开启它,在退后的时候,多次出现该Activity,就将该Activity的启动模式变为singleTask. 这样在之后的多次启动该Activity,便会调用onNewIntent(Intent intent)方法. activity通过intent传

VS2013无法启动 IIS Express Web解决办法

开发环境:windows8.1+VS2013 使用VS2013有一段时间了,因前期都是编写C/S程序,没有使用到B/S调试器.前几日,创建了一个MVC项目,突然发现VS2013无法调试,报了这样的错. 一下子有点蒙,why? 修改项目属性的Web项,如下. F5运行,仍然出错. 这时候我知道了是Web调试器没有启动,但是却不明白为什么.于是检查IIS8.5的安装情况,把一些可能需要安装的都给装了. F5运行,问题依旧. 问题焦点已经很清楚了,就是IIS Express未能启动.于是想到查看事件,

PHP Apache shutdown unexpectedly启动错误解释及解决办法

本文出自:http://blog.csdn.net/svitter 实验环境:Myeclipse10 + tomcat7.0 有时间会写windows和linux下的tomcat配置,现在时间有限,暂且不写了..有些东西也是没有理解透彻. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <%@ page language="java" contentType="

SharePoint2010 安装时报“未能启动数据库服务 MSSQL$Sharepoint"解决办法

1. 为什么关注R画图? 1)R画图好看,图片质量高.可以和R语言结合在一起,而R会是我接下来几年工作的主要语言. 2)毕业论文时知道了R画图不是个简单的事情,复杂琐碎,是一个经验活,学习曲线陡峭 3)作为数据分析的一项基本技能,就是画出好看的图.R语言画图能力足够用了,普适性也高. 2. 进军路线 1)学习R in a nutshell中的画图内容.三个包:graphics,lattice,ggplot2. 2)战略目标:了解graphics,熟悉lattice,精通ggplot2 3)战略成

installshield制作的安装包卸载时提示重启动的原因以及解决办法

原文:installshield制作的安装包卸载时提示重启动的原因以及解决办法 有时候卸载installshield制作的安装包程序,卸载完会提示是否重启电脑以完成所有卸载,产生这个提示的常见原因有如下几种:1. 卸载时,程序正处于运行状态2. 卸载时,程序文件夹处于打开状态3. 卸载时,有文件被别的进程调用,或者在进程中,常见情况如dll在进程中 一般来说解决办法是针对第三种情况的,解决办法是卸载时强制杀进程,比如在OnMaintUIBefore或者OnUninstall里写上强制杀进程的代码

APP开发----启动闪屏的解决办法

闪屏的原因主要是我们启动Activity的时候,需要跑完onCreate和onResume才会显示界面.也就是说需要处理一些数据后,才会显示.按照这种思路,是不是我把初始化的工作尽量减少就可以避免黑屏?事实是,就算你onCreate啥都不做,仍然会闪一下黑屏,因为初始化解析界面时需要一定时间.下面是解决办法: 一.自定义Theme //1.设置背景图Theme---程序启动快,界面先显示背景图,然后再刷新其他界面控件.给人刷新不同步感觉 <style name="Theme.AppStar

Web IIS Express 启动不了,解决办法

重装系统后安装了VS2015专业版,但是运行项目的时候提示IIS Express启动失败.刚开始网上搜了一下解决办法然后都试了一下,但是无法解决这个问题,后来去查看了一下系统日志,发现是"aspnetcore.dll "未能加载,打开对应的文件夹没有这个dll. 既然是少了这个dll,那就安装个就好了,如下图 安装好这个之后重新打开VS,运行项目,OK!

Oracle监听服务无法启动或丢失的解决办法

当用可视化工具连接时,错误提示: 执行请求的操作时遇到错误: IO 错误: The Network Adapter could not establish the connection 1)使用了Cclear或鲁大师等注册表清理工具清理后导致无法启动 无法启动OracleOraDb10g_home1TNSListener服务 解决办法:①打开注册表编辑器,在HKEY_LOCAL_MACHINE/SYSTEM/ControlSet/下的Services和HKEY_LOCAL_MACHINE/SYS

启动xwindows时出错解决办法

在安装centos时,选择是基本模式.安装好以后发现,启动xwindows时出错:waiting for xserver to shut down 原因是基本安装没有安组桌面环境组件. 解决办法: yum groupinstall "X Windows System" yumgroupinstall "Desktop" yumgroupinstall "Chinese Support"