当前位置:操作系统 > 安卓/Android >>

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

在开发中,我们经常会在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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,