Android排錯:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added


轉自:http://www.cnblogs.com/royenhome/archive/2011/05/20/2051879.html

異常場景:

經常在應用中需要處理一些耗時的工作,諸如讀取大文件、訪問網絡資源等。爲了避免因程序假死而帶來的糟糕用戶體驗,通常我們可以通過線程+Handler或者Android提供的AsyncTask來解決該問題,並一般以ProgressDialog等提示性控件來告知用戶當前的程序進度。而標題中描述的異常則會常常出現在這樣的場景中,並且往往掩蓋了導致異常的真正的罪魁禍首。

 

問題原因:

從異常描述中,大致的意思是存在窗口句柄泄露,即未能及時銷燬某個PhoneWindow。而這往往誤導了我們,把過多的精力放在查找所謂的內存泄露上了。其實存在這麼一種情況,即因我們在非主線程中的某些操作不當而產生了一個嚴重的異常,從而強制當前Activity被關閉。而在關閉的同時,卻沒能及時的調用dismiss來解除對ProgressDialog等的引用,從而系統拋出了標題中的錯誤,而掩蓋了真正導致這個錯誤的異常信息。

 

解決方法之一:

本解決方法並不能真正的解決問題,但是在一定程度上可以將真正導致錯誤的異常信息顯露出來。即重寫Activity的onDestroy方法,在方法中調用dismiss來解除對ProgressDialog等的引用。


發佈了28 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章