在我的Android活動中,我多次使用rawquery。我爲這個rawquery使用了一個靜態遊標。我的問題是:我應該在執行另一個rawquery之前關閉光標,或者直到所有的rawqueries都被執行(只關閉一次)。Android有效光標使用?
我試了兩個,結果是一樣的。但就性能/調試而言,哪一個更好?
在我的Android活動中,我多次使用rawquery。我爲這個rawquery使用了一個靜態遊標。我的問題是:我應該在執行另一個rawquery之前關閉光標,或者直到所有的rawqueries都被執行(只關閉一次)。Android有效光標使用?
我試了兩個,結果是一樣的。但就性能/調試而言,哪一個更好?
你應該完成後關閉你的光標。否則你會爲你的應用程序使用所有允許的遊標資源(它是有限的)並且會得到一個異常。
使靜態不會使它成爲一個打開所有的遊標。請記住它在Java方面是靜態的;這裏有一個本地端,它爲每個打開的遊標使用新的資源。你需要釋放這些資源。
如果在每次使用後都沒有關閉遊標,則說明內存泄漏非常嚴重。實際上你在做的是用每個查詢創建一個新的遊標,但是使用一個靜態引用來引用最新的遊標。 (對舊遊標的引用丟失。)
如果(例如)運行時嘗試執行一些垃圾回收,未關閉的遊標也可能導致更嚴重的錯誤。 SQLiteDatabase的finalize()
方法(在垃圾回收時調用)會在發現某些遊標仍然處於打開狀態時拋出異常,這會導致您的應用程序被終止。
非常感謝! –
「但就表現而言,哪一個更好?」如果您使用[DDMS](https://developer.android.com/tools/debugging/ddms.html)這樣的工具,您可以自己輕鬆回答這個問題。 – Sam