2012-09-16 71 views
1

這個問題看起來很像我讀過的很多,但是後來我發現沒有任何代碼能夠滿足我。 (或者我太困了,不知道這一點)在Android上保持單一數據庫連接

我有一個單身數據庫幫助程序,以確保其中只有一個存在。問題不在這裏。在嘗試確保只有一個數據庫連接時仍遇到問題,同時仍使用getReadableDatabasegetWritableDatabse方法。

我知道它在大多數情況下返回相同的引用,我可以處理它的使用,但我不知道如果我有隻讀連接打開(可能是內存不足)和另一個線程想要打開一個可寫的連接。我想阻塞寫入線程,直到只讀連接關閉,然後嘗試打開可寫連接。

你是怎麼做的?這可能只能通過一些線程鎖定在Java中完成,但不知道應該使用哪種方法。

P.S.如果我錯過了某些東西 - 請隨時向我展示如何以另一種方式完成。

+0

'用完內存'?你的db的大小是多少? – Lucifer

+1

幾周前我有同樣的問題,我最終實現了內容提供者。這是一個矯枉過正的問題嗎?由於數據只能在相同的應用程序中訪問。但我真的很喜歡它如何將訪問SQLite數據庫的一些複雜問題抽象出來,而且它也非常適用於加載器。 –

+0

@Lucifer,我的應用程序從來不是唯一使用內存的應用程序。 – Pijusn

回答

1

我在過去經歷過同樣的問題,同步就是答案。簡單地說,在數據庫幫助器實例上進行同步。或者,您可以爲getWritableDatabase創建一個包裝器方法,並在方法聲明中使用synchronized關鍵字。然後永遠不要調用getReadableDatabase,而只是包裝方法。由於getReadableDB和getWritableDB提供了相同的參考,所以這樣做是安全的。合理?

+0

是的,我正在考慮這個問題,這就是我做的一個快速解決方法,但是我想繼續使用'getReadableDatabase',因爲它在大多數情況下都會成功,即使getWritableDatabase不會。我的應用程序寫的很少,很多都是閱讀。這意味着它可能會發生衝突,但如果我使用'getReadableDatabase',它可以成功處理低內存。 – Pijusn