closures数据库连接的最佳位置

我正在寻找一段时间来回答我的问题,但我没有得到我所需要的。 我有一个ListView的应用程序,并forms在哪里我可以添加新的logging到数据库。 所以没有太多的问题要做。

如何处理连接到数据库? 我应该closures它后,得到我想要什么,或者应该保持打开一直到应用程序closures? 我想知道什么是最好的方式,同时考虑性能和电池寿命。

根据Google工程师的这篇文章,打开数据库连接没有任何问题:

Android做出了一个故意的devise决定,看起来令人惊讶,放弃应用程序的整个理念,干脆退出,而是让内核清理他们的资源。 毕竟,内核无论如何都需要能够做到这一点。 考虑到这样的devise,在整个过程的整个过程中保持任何开放状态,永远不要closures它,这不是泄漏。 清理过程将清理。

所以,为了简单起见,我将扩展Application类来为您的代码提供一个定义良好的入口点,并在onCreate()打开数据库连接。 将数据库连接作为字段存储在您的应用程序中,并提供一个访问器方法来使连接可用于代码的其余部分。

那么,不要担心closures它。

build立到数据库的连接是很昂贵的。 如果连接不够用,而且数据库是本地的,那么我会保持连接的开放,而不是像数据库的每次写入操作那样build立连接,就像在一个需要扩展到客户机 – 服务器的应用程序中一样容纳大量的并发用户。

一般来说,我会在打开连接的Activity的onDestroy()函数中closures连接。 我会在使用游标的函数中closures()一个来自数据库的游标。

 public MyActivity extends Activity{ private myDatabase mDatabase; // myDatabase extends SQLiteOpenHelper private Cursor mCursor; public MyActivity(Context context){ super(context); initMemberVariables(); } public ElementButton(Context context, AttributeSet attrS){ super(context, attrS); initMemberVariables(); } public ElementButton(Context context, AttributeSet attrS, int defStyle){ super(context, attrS, defStyle); initMemberVariables(); } private void initMemberVariables(){ mDatabase = new PSEdb(this.getContext()); } private void getData(){ mCursor = mDatabase.MyGetterFunction(); while(mCursor.moveToNext()){ try{ // populate your data }catch(CursorIndexOutOfBoundsException ex){ // handle the exception } } mCursor.close(); } @Override public void onDestroy(){ super.onDestroy(); mDatabase.close(); } }