2011-11-26 30 views
0

我有一個發射Activity A1,其具有啓動Service S1開始按鈕:結算的活動堆棧只需按一下

startButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

       Log.i(TAG1, "Starting Update Service"); 
       startService(serviceIntentS1); 
      } 
     }); 

S1取決於一些條件開始Activity A2:

if (giveninteger>=2) 
     { 
      Intent intentA2= new Intent(this, A2.class); 
      // following line to avoid exception 
      intentA2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //to avoid exception 
      startActivity(intentA2); 

     } 

A2訂閱S1,從A2用戶可以藉助S1查看定期更新的數據。 A2有以下代碼停止S1服務:

public void onBackPressed() { 
     try { 
      Log.i(TAG2, "Killing Update Service"); 
      stopService(serviceIntentS1); 

       } catch (NullPointerException e) { 
      Log.i(TAG3, "Service was not running " + e.toString()); 
     } 
     finish(); 
     System.exit(0); 
     return; 
    } 

我的問題是,如果更新從A2運行10次,用戶必須按後退按鈕10次,退出Activity A2。這是A2的實例堆積在Activity堆棧中。我在S1從A2發佈A2期間試過所有標誌,但沒有成功。無論更新運行多少次,我只想退出Activity A2即可。

任何建議將幫助。

+0

你所說的 「更新」 是什麼意思?您是否在A2中使用BroadcastReceiver來捕獲S1中的Intents或什麼? –

+0

是的,我在A2中使用BroadcastReceiver並獲得web服務 –

+0

那麼,您是如何在活動堆棧中獲得多個A2實例的?哪個組件開始全部?如果S1服務那麼爲什麼它每次都是startActivity()而不是sendBroadcast()?如果有其他人,那麼哪些? –

回答

1

你需要的是A2的SingleInstance,這樣不論次數A2推出只有一個實例的保持,你需要按後退按鈕只有一次。 在AndroidManifest文件中定義該屬性。

<activity android:launchMode"singleInstance"/> 
+0

謝謝Rajdeep ...問題是,如果我使用它,活動A2的數據不會從服務S1更新。 –

+0

我解決了這個問題。感謝Rajdeep指導我清單文件。我不得不這樣做清單文件的活動A2以下設置:機器人:clearTaskOnLaunch =「真」 機器人:stateNotNeeded =「真」 機器人:noHistory =「真」 –