2010-10-08 180 views
3

在過去的幾天裏,由於我的應用程序中存在數據庫泄漏,我經常收到很多錯誤消息,所以現在我打開數據庫,從中獲取查詢結果並再次關閉數據庫。關閉還是不關閉?

但我也使用cursoradapter爲我autocompletetextview。

我是否也應該這樣做:打開數據庫,獲取光標,關閉數據庫?

我的意思是,我沒有,因爲如果不這樣做的任何問題,但是......

所以我需要你

+0

頂部提示:「tips」不是「tipps」 – skyfoot 2010-10-08 13:22:20

+0

對不起,這個錯誤:) – Tima 2010-10-08 13:33:26

回答

2

您應該可以在onCreate方法中打開數據庫,並在onDestroy方法中關閉它。這將保證只要活動「活着」並且最終將被清理,它就可以使用。

此外,您應該在與適配器一起使用的光標上使用「startManagingCursor」。這將確保在暫停,恢復和銷燬時分別關閉,重新設置和關閉。一旦完成從適配器獲取數據,適配器中未使用的光標應該關閉。

如果您遵循這些規則,應該不會泄漏。

+2

我不明白谷歌的人。他們給出了一些使用數據庫或遊標的教程(例如,記事本教程)。我從來沒有見過任何關閉方法遊標或數據庫...我也試過startManagingCursor,但我遇到了問題......不記得爲什麼 – Tima 2010-10-08 18:26:08

+0

好吧,缺少關閉遊標可能是因爲他們正在做的所有事情都被startManagingCursor覆蓋,他們大力宣傳。無法在onDestroy中關閉數據庫當然是渺茫的,但我不知道它有多危險。 – beekeeper 2010-10-08 19:29:01

0

專家提示,提示你應該總是關閉數據庫連接。

+0

我只是想,如果這有意義重新打開數據庫每次用戶在autocompletetextview中鍵入新的字符。也許還有其他解決方案?! – Tima 2010-10-08 13:35:42

+0

那麼,打開一個數據庫連接是非常昂貴的,所以它取決於應用程序的上下文。最理想的選擇是儘可能晚地打開與數據庫的連接,直到最後一個查詢被調用,然後最終關閉它。 – 2010-10-08 13:43:18

+0

就我而言,這將是用戶準備好輸入內容並點擊建議列表或按鈕中的條目的時間。但cursoradapter應該如何注意這一點。我沒有看到任何方法來摧毀或關閉cursoradapter ...但我現在有一個想法。我實現了自定義的遊標適配器,所以我可以寫一個關閉的方法......謝謝:) – Tima 2010-10-08 14:02:04

0

不考慮使用finalize()來關閉數據庫連接。無法保證什麼時候會被調用,甚至是否會被調用。有關更多詳細信息,請參閱「Effective Java」第二版第7項。

您可以使用onPause(),onResume()關閉/打開連接嗎?我相信android提供了一些保證,那些被調用。