如果 activity 或片段在未关闭其中打开的数据库连接的情况下完成,在 android 中会发生什么情况?

what happens if activity or fragment is finished withought closing database connection opened in it, in android?

我在几个活动和片段中分配这个数据库查询对象 这些是重型静态数据库,包含数十万条记录。

如果我分配和取消分配这些对象,这可能会导致堆 fragmentation.does android 当打开数据库连接的上下文不再存在时自动关闭连接,即使我在打开时没有使用上下文对象数据库连接。

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);          

    }

Java 中的内存泄漏是应用程序不再使用某些对象的情况,但垃圾收集无法将它们识别为未使用,因此不会将其清理。

每次您创建一个对象时,内存中的一些 space 会被保留给该对象。任何数据库连接也是如此。所以,在使用连接之后,如果你不关闭它,GC 就不知道这个对象将不再被使用,因此不会删除它。因此,它保留在内存中,在程序的其余部分运行时消耗宝贵的资源。 [因此资源泄漏]。

这根本不是我们想要的。此外,这会使您的程序面临安全问题,因为连接是打开的,它很容易受到攻击,并且可以对数据库进行更改。请记住,即使在 Activity 关闭后,如果存在 运行 线程或 AsyncTask,数据库连接也会与线程一起保持打开状态。

进一步阅读:What is a memory leak? 计算器溢出:Closing database connection to avoid memory leak