我应该在哪里调用close()代码? LogCat返回这个错误: close()从来没有显式调用数据库android.database.sqlite.DatabaseObjectNotClosedException:应用程序没有closures在这里打开的游标或数据库对象 错误是这样的: > 12-16 17:24:50.886: ERROR/Database(10982): close() was never explicitly called on database '/data/data/com.psyhclo/databases/calls.db' 12-16 17:24:50.886: ERROR/Database(10982): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 12-16 17:24:50.886: ERROR/Database(10982): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1827) 12-16 17:24:50.886: ERROR/Database(10982): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820) 12-16 17:24:50.886: ERROR/Database(10982): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854) 12-16 17:24:50.886: ERROR/Database(10982): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847) 12-16 17:24:50.886: […]
本周我一直在学习关于ContentProvider的所有内容,并使用SQLiteOpenHelper类来pipe理提供者内部数据库的创build和升级。 具体来说,我一直在通过sdk的samples目录中的NotePad例子。 现在,我可以看到SQLiteOpenHelper有一个close()方法。 我知道,将闲置的数据库打开是不好的做法,可能导致内存泄漏,而不是(除非这个讨论是朝着正确的方向进行的)。 如果我在一个Activity中使用这个类,那么我只需要在onDestroy()方法中调用close()方法,但据我所知,ContentProvider没有活动所用的生命周期。 NotePad的代码似乎永远不会调用close(),所以我想假设它由SQLiteOpenHelper或其他一些难题处理,但我真的很想知道。 我不太相信样例代码,或者… 问题摘要:我们应该什么时候closures供应商的数据库?