展会信息港展会大全

Android 以singleInstance模式加载的Activity怎么接收以putExtra方式传递过来参数
来源:互联网   发布日期:2016-01-14 10:57:21   浏览:1740次  

导读:在开发中,我们经常会在AndroidManifest.xml中指定Activity的加载模式为singleInstance,方式如下:[javascript] <activity andr...

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

[javascript] <activity android:name="ImgInfo" android:label="@string/app_name"

android:screenOrientation="portrait" android:launchMode="singleInstance">

</activity>

<activity android:name="ImgInfo" android:label="@string/app_name"

android:screenOrientation="portrait" android:launchMode="singleInstance">

</activity>

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

[plain] Intent i = new Intent(this, ImgInfo.class);

i.putExtra("id", mPhotoId);

startActivity(i);

Intent i = new Intent(this, ImgInfo.class);

i.putExtra("id", mPhotoId);

startActivity(i);

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

[plain] Bundle bud = getIntent().getExtras();

if (bud != null && bud.containsKey("id")) {

mPhotoId = bud.getInt("id");

}

Bundle bud = getIntent().getExtras();

if (bud != null && bud.containsKey("id")) {

mPhotoId = bud.getInt("id");

}

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

[java] @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");

}

//其他操作

}

@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的加载机理及相关回调函数了。本博只记录工作中遇到的小问题,不阐述原理,如需要,请查询相关资料吧!

摘自 心灵净土

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港