2012-05-12 90 views
4

我在學習開源Android項目時遇到這個問題。Android --- startActivity或startActivityForResult將如何影響當前活動的邏輯流?

我有一個活動A1,在其「onCreate」方法中調用另一個活動A2。但是,在「startActivity/startActivityForResult」方法之前和之後都有代碼語句。在「startActivity/startActivityForResult」方法之後,我不知道A1中的執行順序。

爲A1的代碼框架下面列出:

public void onCreate(Bundle bundle) { 
    <code statements before> 
    this.startActivityForResult(.....); // Start A2 here. 
    <code statements after> 
} 

public void onResume() { 
    <code statements> 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    <code statements> 
} 
..... 

不知A1是否會首先完成它的執行週期(即 「的onCreate」 - > 「調用onStart」 - > 「的onResume」 - > 「的onPause」 - >「onStop」),然後它會調用A2,或者在調用A2之前首先完成「onCreate」,或者有其他執行邏輯?另外,當A2返回(結束)並調用A1中的「onActivityResult」時,A1執行「onActivityResult」方法後會執行「onRestart」 - >「onStart」 - >「onResume」嗎?

因爲A1和A2都有自己的用戶界面,我認爲這兩個活動可能不會同時與兩個不同的線程執行。有沒有人知道這種情況下的確切執行順序?

在此先感謝您的任何建議。

+0

瞭解[** Activity Lifecycle **](http://developer.android.com/reference/android/app/Activity.html)的工作方式將有所幫助。 –

回答

2

它們不會在不同的線程上執行,都會在主UI線程上執行。您不能保證何時/如果onResume()和onPause()將按Android生命週期文檔here中所述進行調用。

如果您要在活動的onCreate()中啓動另一個活動,則應該預期A1 UI未加載(第一次)。您應該期望在A2返回結果時看到它。

除此之外,我建議你試試看,看看你自己。

12

我使用2個非常簡單的Android活動模擬了這種情況,並得到了下面的結果。

以下是當安卓執行「startActivity」 /「startActivityForResult」活動A1再掀活動A2的方法中會發生什麼,

  1. 將認識到,現在有一個意圖火它會執行到當前方法的結尾(它不會直接跳轉到內聯的活動A2),然後它會調用當前活動A1的「onPause」方法(以允許我們保存當前狀態),然後離開當前活動,
  2. 它現在將啓動內置活動A2並調用其onCreate - >「onStart」 - >「onResume」方法序列,
  3. 如果調用初始調用活動A1的「onStop」方法活動A2覆蓋了整個屏幕,如果被調用的活動A2是「singleTask」活動並且A1位於堆棧中的A2的頂部(所有活動),則可以在此調用初始調用活動A1的「onDestroy」方法在「singleTask」活動被帶到前面時,將會銷燬「singleTask」活動的頂部)。

我在這裏寫下來,希望能對他人有所幫助。

+0

超級細節!愛它! –

+0

正是我想要的。謝謝。你可以發佈你的測試代碼,以便我們可以嘗試以及... – AKh

相關問題