Fix*_*xus 54 database sqlite android
我正在寻找一段时间来回答我的问题,但我没有得到我需要的东西.我有一个带有ListView的应用程序,以及可以向DB添加新记录的表单.所以没有太多的疑问要做.
如何处理与db的连接?我应该在得到我想要的东西之后将其关闭,还是应该一直打开它直到应用程序关闭?我想知道在考虑性能和电池寿命时最好的方法是什么.
Gra*_*and 111
根据谷歌工程师(Dianne Hackborn)的这篇文章,让数据库连接保持打开没有错:
Android做出了一个刻意的设计决定,看起来令人惊讶,只是放弃了应用程序干净利落的整个想法,而是让内核清理他们的资源.毕竟,内核需要能够做到这一点.鉴于这种设计,在整个过程的整个过程中保持 任何开放状态并且永不关闭它根本不是泄漏.清理过程后将清理它.
因此,为简单起见,我将扩展Application类,为您的代码提供一个明确定义的入口点,并在其中打开数据库连接onCreate().将数据库连接存储为应用程序中的字段,并提供一种访问器方法,以使连接可用于其余代码.
然后,不要担心关闭它.
一般来说,我会在打开连接的 Activity 的 onDestroy() 函数中关闭连接。我会在使用游标的函数中从数据库中关闭()一个游标。
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();
}
}
Run Code Online (Sandbox Code Playgroud)
建立与数据库的连接是昂贵的。如果连接不短缺,并且数据库是本地的,我会保持连接打开,而不是为数据库的每个写入操作建立连接,就像您通常在需要扩展的客户端-服务器应用程序中所做的那样容纳大量并发用户。
| 归档时间: |
|
| 查看次数: |
31107 次 |
| 最近记录: |