2010-07-26 82 views
9

我嘗試使用此代碼從一個父活動啓動多個活動:Android:可能在同一個任務中啓動一個Activity的多個實例?

for (int i=0; i<NUM_ACTIVITIES; i++) 
{ 
    Intent intent = new Intent(this, MyActivity.class); 
    startActivity(intent); 
} 

但是,根據我的日誌中MyActivity.onCreate(),只有1活動實際創建。預期這種行爲?如果是這樣,啓動多個活動的正確方法是什麼?

+0

真是一個有趣的問題。 – anticafe 2011-12-01 04:52:09

回答

9

您不能同時在頂部有多個活動。你是否試圖讓它們依次運行?做到這一點

的方法之一是啓動每個活動的結果:

Intent intent = new Intent(this, MyActivity.class); 
startActivityForResult(intent, 0); 

如果您使用的激活碼,活動運行時跟蹤。然後,在onActivityResult你就可以開始下一個:

protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    if (requestCode < NUM_ACTIVITIES) { 
    Intent intent = new Intent(this, MyActivity.class); 
    startActivityForResult(intent, requestCode + 1); 
    } 
} 

編輯: 如果你想有一些活動立刻在後臺,你可以通過在每個活動的onCreate調用startActivity把它們結合在一起。如果您在創建任何視圖之前在onCreate中啓動新的活動,該活動將永遠不可見。

protected void onCreate (Bundle savedInstanceState) { 
    int numLeft = getIntent().getIntExtra("numLeft"); 
    if (numLeft > 0) { 
    Intent intent = new Intent(this, MyActivity.class); 
    intent.putExtra("numLeft", numLeft - 1); 
    startActivity(intent); 
    } 
} 

這應該做到,你想堆..

+0

活動的多個實例不能同時處於頂部的原因是什麼?我不熟悉Android的這種限制/限制... – zer0stimulus 2010-07-27 00:38:22

+0

您可能需要閱讀有關活動生命週期的文檔:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle There是活動活動的堆棧,但只有最上面的一個可見(除了對話框的情況,但仍然只有一個是活動的)。我不會認爲它是一個限制...也許你可以解釋你想通過一次開始多個活動來完成什麼行爲? – 2010-07-27 01:33:32

+0

這是更多的實驗來檢查我對活動的理解。我認爲一個Activity的新實例默認通過'startActivity()'啓動,如果我激發3個intents,則會創建3個新的Activities對象 - 2個在後臺,1個在前臺。 – zer0stimulus 2010-07-28 13:05:47