最近公司開(kāi)會(huì)決定形纺,app中的消息傳遞廢棄CS架構(gòu)丘侠,改用消息隊(duì)列, 額 逐样,一臉懵逼,話不多說(shuō)蜗字,說(shuō)一下坑吧
打肝,因?yàn)轭~,項(xiàng)目經(jīng)理喜歡彈框的樣式挪捕,就自己定義了一個(gè)彈框樣子差不多是這樣粗梭。
額 ,假裝有一張圖 .....
這個(gè)界面要接受消息隊(duì)列级零,然后自動(dòng)給用戶彈出來(lái)dialog断医,顯示有商家回復(fù)你的訂單,開(kāi)始測(cè)試的時(shí)候沒(méi)有問(wèn)題奏纪,但是如果用戶頻繁的取消訂單鉴嗤,再下單,就會(huì)出現(xiàn)以下問(wèn)題
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@406ab4c8 is not valid; is your activity running?
what序调?醉锅,is your activity running?,這個(gè)是當(dāng)前的activity发绢,怎么回報(bào)這個(gè)錯(cuò)誤硬耍。查了一下資料。
dialog是需要依附于activity存在的边酒,當(dāng)activity銷毀的時(shí)候经柴,如果執(zhí)行dialog.show 就會(huì)以下,
于是代碼改成了
if(!Activity.this.isFinishing()) {
dialog.show
}else{
Log.d("flag","===========Activity.this.isFinishing()");
}
發(fā)現(xiàn)不報(bào)錯(cuò)了墩朦,但是坯认,有的時(shí)候會(huì)直接走else,activity顯示銷毀狀態(tài)介杆,
檢查了以下代碼鹃操,在onDestory()方法執(zhí)行的時(shí)候,檢查了dialog是不是顯示春哨,如果顯示荆隘,讓他隱藏,是不是為空赴背,如果不為空椰拒,則制空,這些都判斷了凰荚,最后查閱資料顯示燃观,窗體泄露主要是當(dāng)前的activity,要接收消息隊(duì)列便瑟,不能完全銷毀缆毁,雖然activity跟windows分離,但是不會(huì)完全銷毀到涂。
最后的解決辦法是脊框,在其他的activity接收消息隊(duì)列颁督,通過(guò)EnvetBus Post到這個(gè)顯示dialog的頁(yè)面。進(jìn)行顯示doalog浇雹。