2012-07-25 41 views
0

我有一個活動,通過意圖調用第二個活動。第二個Activity被調用後,我想完成第一個活動。因此,我在onStop()方法如下代碼:應該調用finish()嗎?

@Override 
public void onStop() { 
    super.onStop(); 
    if (shouldBeClosed) { 
     finish(); 
    } 
} 

的問題是,我的第一個活動是沒有關閉。我不明白爲什麼?
也許我應該把這段代碼放入onPause()
但據我瞭解,在這種情況下,當活動鬆散焦點(就像在對話後),我的活動可以關閉。
那麼爲什麼會發生這種問題,我該如何糾正這種行爲?

P.S.變量shouldBeClosed爲真。這不是重點。

編輯

這裏是次活動的號召:

Intent intent = new Intent(this, AcSpContextAssign.class); 
Bundle extras = new Bundle(); 
extras.putInt(Constants.KEY_FROM_ACTIVITY, Constants.FROM_AcSpNameCreate); 
extras.putLong(Constants.KEY_SPID, spId); 
intent.putExtras(extras); 
startActivity(intent); 
+0

我已經在得到完成活動的習慣我在創建下一個活動後不再需要。我會認爲使用onPause()或onStop()會做到這一點沒有問題。你怎麼知道它沒有關閉?它活多久? – Joel 2012-07-25 18:55:45

+0

如果我按下後退按鈕或完成第二個活動,我會看到第一個活動。 – Yury 2012-07-25 18:57:05

+0

表示同意,你怎麼知道它沒有完成?你可以通過在'onCreate()'中放置一個斷點來確定。在'onStop()'代碼運行後,你應該在下次調用activity時看到'onCreate()'。 – 2012-07-25 18:58:11

回答

2

通常情況下,你應該調用finish()爲你的第一個活動,你發送的意圖之後。喜歡的東西:

... 
startActivity(secondActivityIntent); 
finish(); 

這將觸發的onPause() - >的onStop() - >的onDestroy()鏈爲你的第一個活動,這樣你就可以進行正常的清理有

+0

謝謝,它的工作原理。但是,我不明白一些事情:1.爲什麼我的onStop方法在此活動中未被調用? 2.你能否解釋爲什麼在開始新的活動代碼之後繼續執行? – Yury 2012-07-25 19:24:15

+0

我認爲這是因爲操作系統可以按照自己的計劃自由銷燬該活動。沒有什麼需要它在失去前景後立即銷燬一項活動。儘管onPause()方法應該在丟失前景之後立即調用,並在onStop之後立即調用。 – Joel 2012-07-25 19:30:09

+0

@Yury喬爾是對的。在我需要儘快銷燬一項活動之前,我一直在處理同樣的問題。但是,Android操作系統並不能保證在活動離開前景時立即調用onDestroy()。首先,操作系統會優先考慮您的第二項活動,以便初始化並轉移到閒置狀態。只有在此之後,您的第一個活動纔會發生Destroy事件。 – 2012-07-25 20:08:32

相關問題