2015-07-19 25 views
0

我在幾個活動和片段中分配了這個數據庫查詢對象 這些是沉重的靜態數據庫,包含數十萬條記錄。如果活動或片段完成,並且在Android中打開關閉數據庫連接,會發生什麼情況?

如果我分配和釋放這些對象,這可能會導致堆fragmentation.does當打開數據庫連接的上下文不再存在時,即使我在打開數據庫連接時沒有使用上下文對象,android也會自動關閉連接。在Java中

public DatabaseQueries() 
    { 
     dbForUpdationList = SQLiteDatabase.openDatabase(
       Environment.getDataDirectory()+"/data/package/databases/updation_list.db", null, 
       SQLiteDatabase.OPEN_READONLY); 
     dbForVillageWadiList = SQLiteDatabase.openDatabase(
       Environment.getDataDirectory()+"/data/package/databases/village_wadi.db", null, 
       SQLiteDatabase.OPEN_READONLY);   

    } 

回答

1

內存泄漏是其中某些對象不使用應用程序的任何更多的情況,但垃圾收集不承認他們是未使用的,因此,不會清理。

每次創建對象時,都會爲該對象保留內存中的一些空間。對於任何數據庫連接也是如此。所以,在使用連接之後,如果你不關閉它,GC不會知道這個對象不會再被使用,因此不會被刪除。所以,它會留在記憶裏,在程序運行的其他部分中吃掉寶貴的資源。 [因此資源泄漏]。

這並不是所有需要的。此外,這會將您的程序暴露給安全問題,因爲連接處於開放狀態,易受攻擊,並且可能會對數據庫進行更改。請記住,即使在活動關閉後,如果有正在運行的線程或AsyncTask,數據庫連接也會與線程一起保持打開狀態。

延伸閱讀:What is a memory leak? StackOverflow上:Closing database connection to avoid memory leak

相關問題