onWindowFocusChanged重要作用


Activity生命周期中,onStart, onResume, onCreate都不是真正visible的時間點,真正的visible時間點是onWindowFocusChanged()函數被執行時。
譯注:從onWindowFocusChanged被執行起,用戶可以與應用進行交互了,而這之前,對用戶的操作需要做一點限制。

比如我們在做OTT項目時候,我們就是在這onWindowFocusChanged來獲取主按鍵的具體位置和寬高的,而在其他標准生命周期的接口中調用都是獲取不到的,比如在onResume,onStart中都獲取不到信息。

這個onWindowFocusChanged指的是這個Activity得到或者失去焦點的時候 就會call。。
也就是說 如果你想要做一個Activity一加載完畢,就觸發什么的話 完全可以用這個!!!

使用一個view的getWidth() getHeight() 方法來獲取該view的寬和高,返回的值卻為0。
如果這個view的長寬很確定不為0的話,那很可能是你過早的調用這些方法,也就是說在這個view被加入到rootview之前你就調用了這些方法,返回的值自然為0.
解決該問題的方法有很多,主要就是延后調用這些方法。可以試着在onWindowFocusChanged()里面調用這些方法,驗證時可以獲取到View的寬高的。


相關執行打印:
1: entry: onStart---->onResume---->onAttachedToWindow----------->onWindowVisibilityChanged--visibility=0---------->onWindowFocusChanged(true)------->

2. exit:  onPause---->onStop---->onWindowFocusChanged(false)  ---------------------- (lockscreen)

3. exit : onPause----->onWindowFocusChanged(false)-------->onWindowVisibilityChanged--visibility=8------------>onStop(to another activity)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM