有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这段代码可能会造成潜在的内存泄漏吗?

我在代码中使用自定义数据库类来管理数据库和处理事务。每当我实例化它时,我都会将应用程序上下文传递给它的构造函数。读了安卓开发者网站上的文章后,我不禁怀疑自己是否在做可能导致应用程序内存大量泄漏的事情。简而言之,我的代码如下所示,首先是一个活动:

    public class MyActivity extends Activity
    {

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.somelayout);

            Database db = new Database(getApplicationContext());
        }

    }

我的数据库类(在一个单独的文件中)如下所示:

public class Database
{

    Context context;

    public Database(Context context)
    {
        this.context = context;
    }

    public DatabaseHelper extends SQLiteOpenHelper
    {
        // Pass the context to the constructor etc etc.
    }

}

代码可能有漏洞,我在记事本中很快就写了出来。无论如何,这让我担心,当用户离开活动时,db对象会保留上下文,因此不成功地花费了大量资源。如果真是这样,我该如何避免呢?当不再需要的时候,有没有一种方法可以摧毁和反对它


共 (2) 个答案

  1. # 1 楼答案

    如果数据库对象包含资源,并且没有正确关闭,您可能会遇到麻烦

    如果可能的话,保持纯SQL级别,并使用JDBC池来获得处理这些事情的标准方法

  2. # 2 楼答案

    一旦onCreate完成,db引用的对象就有资格进行垃圾收集。所以这里没有问题

    如果你把dbDatabase.context变成了static字段,那你就应该开始担心了