android.view.WindowLeaked的解決辦法

按字面了解,Window Leaked大概就是說一個(gè)窗體泄漏了,也就是我們常說的內(nèi)存泄漏,為什么窗體會(huì)泄漏呢?

產(chǎn)生原因:

我們知道Android的每一個(gè)Activity都有個(gè)WindowManager窗體管理器,同樣,構(gòu)建在某個(gè)Activity之上的對(duì)話框、PopupWindow也有相應(yīng)的WindowManager窗體管理器。因?yàn)閷?duì)話框、PopupWindown不能脫離Activity而單獨(dú)存在著,所以當(dāng)某個(gè)Dialog或者某個(gè)PopupWindow正在顯示的時(shí)候我們?nèi)inish()了承載該Dialog(或PopupWindow)的Activity時(shí),就會(huì)拋Window Leaked異常了,因?yàn)檫@個(gè)Dialog(或PopupWindow)的WindowManager已經(jīng)沒有誰可以附屬了,所以它的窗體管理器已經(jīng)泄漏了。

解決方法:

關(guān)閉(finish)某個(gè)Activity前,要確保附屬在上面的Dialog或PopupWindow已經(jīng)關(guān)閉(dismiss)了。

比如:

@OverrideprotectedvoidonDestroy() {super.onDestroy();if(mDialog !=null) {

mDialog.dismiss();

}

}

吸取教訓(xùn):

如果我們?cè)谀砤ctivity中聲明了Dialog或者PopupWindow,確保在關(guān)閉當(dāng)前activity時(shí)候,這些狀體已經(jīng)關(guān)閉,否則會(huì)引起Window Leaked

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

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

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