2017-02-09 44 views
6

我相信當onCreate的setContentView(R.layout.myLayout.xml)被調用時,onAttachedToWindow被調用。那麼我是否可以假設在活動被銷燬時調用onDetachedFromWindow的活動生命週期中?我的問題是我如何將這兩個回調掛鉤綁定到活動生命週期?Android視圖 - onAttachedToWindow和onDetachedFromWindow - 何時在活動生命週期中調用它們?

我可以說onAttachedToWindow綁定到onCreate並且onDetachedFromWindow綁定到onDestroy?

回答

7

從技術上講,onAttachedToWindowonResume之後被調用(並且它在每個生命週期中只發生一次)。 ActivityThread.handleResumeActivity呼叫將添加DecorView到當前的WindowManger,該呼叫將依次呼叫WindowManagerGlobal.addView(),該呼叫將遍歷所有視圖並在每個視圖上呼叫onAttachedToWindow

onDetachedFromWindowonDestroy

+0

問題。如果它在onResume中調用,那麼這意味着每次活動恢復時,視圖都會再次重新附加到活動上? – j2emanue

+0

@ WenChao這是不正確的。 onAttachedToWindow在該特定活動的每個生命週期中僅被調用一次。 –

+0

@CatalinMorosan,我應該更清楚地說明,你說得對,它被稱爲一生一次。我想說的是第一個(也是唯一的)'onAttachedToWindow'發生在'onResume'之後,在生命週期中沒有更多的'onAttachedToWindow'調用。謝謝。 – WenChao

0

綁我覺得這可能是當setContentView被稱爲onAttachedToWindow將被調用。

當你在Android氮素利用分屏,以及活動的configChangesAndroidManifest.xml值來進行設置:

"keyboardHidden|orientation|screenSize" 

onAttachedToWindow將在setContentView被調用,因爲在decorview的變量「mAttachInfo」的窗口不爲空,當您撥打setContentViewrootView添加到decorView,dispatchAttachedToWindowaddViewInner()中被調用時。

最後在活動onResume()後,onAttachedToWindow()不再被調用。