WindowManager 引起的血案

最近在一個(gè)項(xiàng)目時(shí),需要在手機(jī)的底部顯示一個(gè)floatview,大致流程是:

ActivityA -> 點(diǎn)擊按鈕 -> 跳轉(zhuǎn)到ActivityB -> 出現(xiàn)floatview

當(dāng)時(shí)想到用WindowManger.addView()來(lái)實(shí)現(xiàn),很快完成了需求,并且在大部分手機(jī)中運(yùn)行良好,但是測(cè)試人員發(fā)現(xiàn)在某些手機(jī)中floatview不能展示出來(lái),于是開(kāi)始蛋疼的定位bug過(guò)程。
開(kāi)始以為是WindowType搞的鬼,但是我前期已經(jīng)針對(duì)6.0,7.0的手機(jī)進(jìn)行了相關(guān)適配,而且出現(xiàn)問(wèn)題并不是這些手機(jī),嘗試了好幾種Type都是不對(duì),各種抓狂。然后嘗試修改其它的WindowManager.LayoutParams參數(shù),也不能解決問(wèn)題。
就在崩潰的邊緣,發(fā)現(xiàn)我的WindowManager獲取方式是

// 其中context是ActivityA
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

然后我把它改成了

mWindowManager = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);

bug奇跡般的修復(fù)啦!!!
后來(lái)發(fā)現(xiàn)其實(shí)floatview并不是沒(méi)有add上,而是add到ActivityA上邊,而此時(shí)AcitivityB出現(xiàn)了,蓋在了floatview上邊,所以現(xiàn)象就是沒(méi)有add上;也就是說(shuō)有的手機(jī)WindowManager的獲取過(guò)程于Context有關(guān)系,具體原因沒(méi)找到,請(qǐng)大神解讀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容