android視窗洩漏

2021-06-16 20:40:41 字數 751 閱讀 3247

在做專案是遇到這個錯誤

google : windowmanager: activity  has leaked window

產生原因: 

我們知道android的每乙個activity都有個windowmanager窗體管理器,同樣,構建在某個activity之上的對話方塊、popupwindow也有相應的windowmanager窗體管理器。因為對話方塊、popupwindown不能脫離activity而單獨存在著,所以當某個dialog或者某個popupwindow正在顯示的時候我們去finish()了承載該dialog(或popupwindow)的activity時,就會拋window leaked異常了,因為這個dialog(或popupwindow)的windowmanager已經沒有誰可以附屬了,所以它的窗體管理器已經洩漏了。 

activity 中create 乙個dialog,若你先關閉dialog再關閉activity就是正常的,若你先關閉activity再關閉dialog就會報錯這個android.view.windowleaked錯誤了。 

分析這個原因是:dialog是基於activity而建立的:new progressdialog(this);this 就是activity。 activtity先finish,那dialog就沒得依附了,所以就會報android.view.windowleaked。

還有如果是windowmanager通過addview方法加上去的view,在activity 退出之前一定要呼叫removeview,否則也會產生視窗洩漏

android記憶體洩漏

參考 什麼是記憶體洩漏 記憶體洩露,簡單的說,就是該被釋放的記憶體沒有被釋放,一直被某個或某些例項所引用但不能被使用,導致gc不能 造成記憶體洩漏。總結的說,可以理解為長生命週期的物件一直持有短生命週期物件的引用,導致短生命週期物件一直被引用而無法被gc 記憶體洩漏是造成oom的主要原因之一,當乙個...

android 記憶體洩漏

1 android效能優化 記憶體洩漏 上 android效能優化 記憶體洩漏 下 1 錯誤的單例模式 public class singleton public static singleton getinstance context context return instance 即使activ...

android記憶體洩漏 1

記憶體洩漏是一種安全機制。是防止記憶體一直被占用的機制。記憶體洩漏,這句話本身就存在著洩漏,誰的記憶體洩漏,洩漏是什麼?無論是執行乙個程序,還是建立乙個物件。都會分配記憶體,記憶體洩漏中的記憶體就是指的這個記憶體。記憶體洩漏的整體意思就是在這個程序中的某個物件的記憶體洩漏了。什麼叫洩漏?洩漏的意思就...