Android 以singleInstance模式加載的Activity怎麼接收以putExtra方式傳遞過來參數 – Android移動開發技術文章_手機開發 Android移動開發教學課程

在開發中,我們經常會在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的加載機理及相關回調函數瞭。本博隻記錄工作中遇到的小問題,不闡述原理,如需要,請查詢相關資料吧!

摘自 心靈凈土

發佈留言