當 Cursor 沒有確實關閉並且累積到一定數目時,App 就會出現異常報錯,無法查詢資料庫,甚至 crash。這邊記錄一些容易出錯的例子:
。提前返回
有時會沒注意到在調用 close() 之前就 return 了,尤其在比較複雜的程式碼中就可能會疏忽。
。異常處理
在還沒執行 close() 之前就因為處理 exception 而跳過。
要避免這種情形,應該要把 close() 放到 finally 裡確保它會執行。
另外我們也可以在 Cursor 的建構及關閉時加上 log 來測試及偵錯。
這樣就能清楚檢查是否有 Cursor 未確實關閉,但要先等 App 完全結束程序時再做,因為有些 Cursor 可能仍在背景運行中。
Reference:
http://oteku.blogspot.tw/2013/11/how-to-detect-android-cursor-leak-en.html
沒有留言:
張貼留言