onWindowFocusChanged淺析

先來一段onWindowFocusChanged的源碼介紹


public void onWindowFocusChanged(boolean ?hasFocus) {

}

問題?

1.PopWindow無法在OnCreate、onStart、onResume中展示?

2.無法在OnCreate、onStart、onResume中獲取View寬度和高度


分析:

Activity生命周期中,onStart, onResume, onCreate都不是真正visible的時間點(diǎn),真正的visible時間點(diǎn)是onWindowFocusChanged()函數(shù)被執(zhí)行時。

譯注:從onWindowFocusChanged被執(zhí)行起,用戶可以與應(yīng)用進(jìn)行交互了,而這之前,對用戶的操作需要做一點(diǎn)限制。

這個onWindowFocusChanged指的是這個Activity得到或者失去焦點(diǎn)的時候 就會call。。

也就是說 如果你想要做一個Activity一加載完畢,就觸發(fā)什么的話 完全可以用這個!??!

使用一個view的getWidth() getHeight() 方法來獲取該view的寬和高,返回的值卻為0。

如果這個view的長寬很確定不為0的話,那很可能是你過早的調(diào)用這些方法,也就是說在這個view被加入到rootview之前你就調(diào)用了這些方法,返回的值自然為0.

解決該問題的方法有很多,主要就是延后調(diào)用這些方法??梢栽囍趏nWindowFocusChanged()里面調(diào)用這些方法,驗證時可以獲取到View的寬高的。

相關(guān)執(zhí)行打印:

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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Activity https://developer.android.com/guide/components/a...
    XLsn0w閱讀 767評論 0 4
  • 0 前言 Activity有生命周期,同樣的,View從添加到界面到從界面中移除也有一個生命周期,在官方文檔中介紹...
    sososeen09閱讀 9,434評論 2 23
  • 啟動與銷毀Activity 不同于使用 main() 方法啟動應(yīng)用的其他編程范例,Android 系統(tǒng)會通過調(diào)用對...
    安卓Boy閱讀 1,877評論 3 5
  • 隔三岔五就會有學(xué)妹學(xué)弟來問我,你是怎么讀大學(xué)的?我要怎么規(guī)劃我的生活?想來只有一句話:選你能力范圍內(nèi)最好的。買衣服...
    水桶君閱讀 694評論 0 51
  • 憶你的高中時代,夢我的青澀年華! 壓抑的青春 高中,一個讓我想起來,內(nèi)心總是波濤洶涌的年紀(jì)! 四年的高中,讓我印象...
    Hallo小先生閱讀 774評論 0 2

友情鏈接更多精彩內(nèi)容