2016-11-25 93 views
0

因此,假設一個活動的控制流有ActivityA:如果一個新的活動啓動

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    if (AndroidUtils.isDeviceRooted()) { 
     Intent i = new Intent(this, ActivityB.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     startActivity(i); 
    } 

    .... 
    // other code of onCreate() 
} 

我知道的一個事實,即startActivity()是異步和新啓動後,當前活動結束。如果是這種情況,那麼「onCreate()的其他代碼」的一部分將被執行,對吧?

編輯:下面的答案是有一種方法來執行代碼startActivity()onCreate()後不執行代碼?如同撥打finish()return或兩者。

回答

1

是的,你是絕對正確的。但不是你的onCreate的一些但所有代碼都會被調用。

下面將是你的這兩個活動的流動

當你永遠從ActivityA導航到ActivityB隨後的onPause()被稱爲隨後ActivityA的的onStop()ActivityA方法,然後該方法的onCreate()的ActivityB被調用,隨後是ActivityB的onStart(),然後是ActivityB的onResume()。

另外通過按下ActivityB的返回鍵

的onPause()導航回到ActivityA時被稱爲後跟ActivityB的的onStop(),然後該方法第一活性ActivityA的onRestart()被調用,接着ActivityA的onStart(),然後是ActivityA的onResume()。

但是,因爲您在onResume調用之前從ActivityA導航,所以onPause不會被調用ActivityB。

1

下面的答案是有沒有辦法執行 startActivity()onCreate()後的代碼?就像調用完成()或返回或 兩者。

如果你打電話finish()一旦創建活動ondestroy將立即叫 和onpauseonStop等將被跳過

boolean isRooted; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

isRooted=AndroidUtils.isDeviceRooted(); 

if (isRooted) { 
    Intent i = new Intent(this, ActivityB.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    startActivity(i); 
    finish(); 
}else{ 
    .... 
    // other code of onCreate() 
} 

} 
相關問題