最近在一個(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)大神解讀