無意中發現windowleaked,錯誤詳細資訊如下:
11-28 16:39:10.867: E/WindowManager(14064): android.view.WindowLeaked: Activity com.sbdz.agriculture.activity.ProductActivity has leaked window android.widget.TextView{45ebeb60 I.ED.... ......I. 0,0-210,348} that was originally added here
11-28 16:39:10.867: E/WindowManager(14064): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:389)
11-28 16:39:10.867: E/WindowManager(14064): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
11-28 16:39:10.867: E/WindowManager(14064): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
11-28 16:39:10.867: E/WindowManager(14064): at com.sbdz.agriculture.activity.SideBar.init(SideBar.java:66)
11-28 16:39:10.867: E/WindowManager(14064): at com.sbdz.agriculture.activity.SideBar.<init>(SideBar.java:47)
翻閱資料,發現産生原因:
Android的每一個Activity都有個WindowManager窗體管理器,同樣,建構在某個Activity之上的Dialog、PopupWindow也有相應的WindowManager窗體管理器。Dialog、PopupWindown不能脫離Activity而單獨存在着,是以當某個Dialog或者某個PopupWindow正在顯示的時候我們去finish()了承載該Dialog(或PopupWindow)的Activity時,會抛Window Leaked異常了。
具體解決辦法:退出Dialog、PopupWindow之前,先調用dismiss();