SQLiteDatabase資源釋放

SQLiteDatabse是android SDK提供的一個sqlite管理類,用於創建,刪除,執行sql命令等任務。每一個sqlite數據庫對應着一個SQLiteDatabase幫助類。SQLiteDatabase提供了一系列的靜態工廠方法用於創建一個SQLiteDatabase實例,這個實例持有着管理sqlite數據庫的必要資源,這些資源的釋放需要用戶手動的調用close函數。SQLiteDatabase的資源釋放是通過引用計數來實現的。產生一個新的SQLiteDatabase的時候,引用計數爲1.每當有其他的對象使用SQLiteDatabase來操作sqlite的時候,引用計數加1,操作完畢之後,引用計數減1.當用戶主動調用SQLiteDatabase的close函數的時候,先將引用計數減1,然後檢查計數是否爲0,如果爲0,那麼就需要釋放SQLiteDatabase所持有的資源。


SQLiteDatabase類圖結構如下:


AutoCloaseable是一個接口,含有成員void close()。抽象類SQLiteCloseable管理着引用計數,函數acquireReference將引用計數加1,releaseReference將引用計數減1.當引用計數減爲0的時候,會調用onAllReferencesReleased()函數,這個函數中用來處理SQLiteDatabase所持有的資源。


這個簡易的框架提供了處理數據庫資源的一種方式,主動提供close函數,而不依賴finalize函數做數據庫資源釋放的動作。同時,巧妙的利用引用計數來管理資源的釋放,這爲多線程使用同一SQLiteDatabase實例能夠正確的處理資源釋放提供了保證。不會導致一個線程在使用SQLiteDatabase的時候,另一個線程調用close導致數據庫被關閉的錯誤。因爲close函數也只是將引用計數減1.只有當引用計數爲0的時候纔會做真正的資源釋放動作。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章