我有一个有数据库的应用程序。
应用程序类只调用它一次,然后将引用转发给需要它的人。当它被初始化时,我调用db = this.getWritableDatabase();并让它处于打开状态。每个简单的双写操作都需要6-10毫秒左右,而第一个写操作需要30-50毫秒,长度是原来的8倍。
那是怎么回事?是初始化吗?我以为打电话给getWritableDatabase()会为我初始化所有的东西?或者还有别的原因?我能在某个地方读到它,为什么和它的行为吗?
提前感谢
编辑:为了更清楚地说明这一点:值是在DB处理程序初始化后写成的,因此初始化工作将结束很长时间。
编辑2:既然我深入研究了这个主题,我发现了两件事:
getWritableDatabase()并不真正打开任何东西,而是在执行第一个游标操作(如cursor.move() )时真正加载?对吗?发布于 2014-10-06 10:01:19
public SQLiteDatabase getWritableDatabase ()创建和/或打开将用于读写的数据库。第一次调用时,数据库将被打开,并且
onCreate(SQLiteDatabase),
onUpgrade(SQLiteDatabase, int, int) and/or
onOpen(SQLiteDatabase) will be called.一旦成功打开,数据库就会被缓存,因此您可以在每次需要写入数据库时调用此方法。(确保在不再需要数据库时调用close() )。
错误,如错误的权限或完整的磁盘可能导致此方法失败,但如果问题得到解决,以后的尝试可能会成功。
数据库升级可能需要很长时间,不应该从应用程序主线程调用此方法,包括从ContentProvider.onCreate()调用。返回
读/写数据库对象有效,直到close()被称为
Throws
SQLiteException if the database cannot be opened for writing.希望这能帮到你。
https://stackoverflow.com/questions/26213542
复制相似问题