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

时间:2011-07-30 09:39:13

标签: java android

我在代码中使用自定义数据库类来管理数据库和处理事务。每当我实例化它时,我都会将应用程序上下文传递给它的构造函数。阅读Android开发者网站上的文章让我想知道我是否正在做一些可能导致我的应用程序中出现大量内存泄漏的事情。简化,我的代码看起来像这样,首先是一个活动:

    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 个答案:

答案 0 :(得分:2)

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

如果您将dbDatabase.context放入static字段,那就应该开始担心了。

答案 1 :(得分:1)

如果Database对象拥有资源且未正确关闭,则可能会遇到麻烦。

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