簡體   English   中英

Android 視圖 - onAttachedToWindow 和 onDetachedFromWindow - 它們在活動生命周期中何時被調用?

[英]Android view - onAttachedToWindow and onDetachedFromWindow - when are they called in the activity lifecycle?

我相信onAttachedToWindow()在調用onCreate()setContentView(R.layout.myLayout.xml)時被調用。 那么我可以假設在活動生命周期中當活動被銷毀時調用onDetachedFromWindow()嗎? 我的問題是如何將這兩個回調掛鈎綁定到活動生命周期?

我可以說onAttachedToWindow()綁定到onCreate()onDetachedFromWindow()綁定到onDestroy()嗎?

從技術上講, onAttachedToWindowonResume之后調用(並且每個生命周期只發生一次)。 ActivityThread.handleResumeActivity調用會將DecorView添加到當前WindowManger ,后者又會調用WindowManagerGlobal.addView() ,然后遍歷所有視圖並在每個視圖上調用onAttachedToWindow

onDetachedFromWindowonDestroy綁定

這不是一個真正的答案,而是一個建議......

很多次,我都有使用這種方法 (onDetachedFromWindow) 取消注冊觀察者和/或清除作用域的沖動……

不要這樣做!!

onDetachedFromWindow() 不等於 Fragment 的 onDestroyView()。

當視圖被銷毀(不幸的是)時,沒有專門調用的內部方法。

在 ViewPager/ViewPager2 中更改頁面時將調用 onDetachFromWindow(),而視圖並未真正被銷毀。 如果您使用 onDetachFromWindow() 來清除范圍,您將得到一個 NullPointerException,或者視圖將在滾動回有問題的頁面時簡單地停止響應更新。

您可以做的最好和最簡單的事情是使用 onDestroyView() 方法來清除范圍。

最難/最好的方法是監聽 Fragment 的生命周期(如果你想要一個一次性實例化的適配器),然后通過適配器向所有觀察適配器的視圖發送一個“銷毀”消息,並讓它們自行注銷自己...... . 甚至沒有構建 DataSetObserver 類來執行此操作(當它應該時)。

我發現調用setContentView時可能會調用onAttachedToWindow

當你在Android N上使用分屏時,要設置AndroidManifest.xml中activity的configChanges的值:

 "keyboardHidden|orientation|screenSize"

onAttachedToWindow會在setContentView中調用,因為 window 的 decorview 中的變量“mAttachInfo”不為 null,當你調用setContentViewrootView添加到decorView時, dispatchAttachedToWindow會在addViewInner()中調用。

最后在活動onResume()之后,不會再次調用onAttachedToWindow()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM