Android 以singleInstance模式加载的Activity怎么接收以putExtra方式传递过来参数

在开发中,我们经常会在AndroidManifest.xml中指定Activity的加载模式为singleInstance,方式如下:

	<activity android:name="ImgInfo" android:label="@string/app_name"
			android:screenOrientation="portrait" android:launchMode="singleInstance">
	</activity>

      用如下方式打开Activity并传递参数:

	Intent i = new Intent(this, ImgInfo.class);
	i.putExtra("id", mPhotoId);	
	startActivity(i);

如果不了解singleInstance的原理,我们想当然地会在Activity ImgInfo 的onCreate方法中写下如下的代码:

Bundle bud = getIntent().getExtras();
if (bud != null && bud.containsKey("id")) {
mPhotoId = bud.getInt("id");
} 

传递不同的id,你就会发现除了第一次能正确接收之外,其他的好像都不行了。需要怎么做呢?重写onNewIntent方法,基本代码如下:

	@Override
	protected void onNewIntent(Intent intent) {		
		super.onNewIntent(intent);
		setIntent(intent);
		InitArg();
	}
	private InitArg(){
		Bundle bud = getIntent().getExtras();
		if (bud != null && bud.containsKey("id")) {
			mPhotoId = bud.getInt("id");
		}
		//其他操作 
	}

这是为什么呢?这就需要深入了解Activity的加载机理及相关回调函数了。本博只记录工作中遇到的小问题,不阐述原理,如需要,请查询相关资料吧!


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值