2015/04/27

android.database.CursorWindowAllocationException

當 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

沒有留言:

張貼留言