cmo*_*opm 15 android android-contentprovider sqliteopenhelper
在我的Android应用程序中,我使用SQLiteOpenHelper来实现ContentProvider.查询,添加,删除操作都是通过ContentProvider完成的.
但是在我的一部Android手机(htc g13)中,我在目录/ data/data/[包名] /数据库中找到了*.db-wal文件.使用ContentProvider进行操作时,文件大小会非常快.它占用用户RAM空间太多.
建议关闭SQLiteOpenHelper来解决我的问题(这很有用)在这里输入链接描述.
但我希望找到一个"地方"来添加"close()"方法,因为我没有直接使用SQLiteOpenHelper(通过ContentProvider使用).ContentProvider中的query()方法必须返回一个Cursor,而SQLiteDatabse应保持打开状态.
我很困惑,我现在做什么让*.db-wal消失并正常使用ContentProvider?
您有几个案例要涵盖:
1)当您的应用程序完成时(例如输入onDestroy()),请确保关闭所有游标,SQLiteDatabase和SQLiteOpenHelpers的数据库实例(使用模型if(connection.isOpen())object.close())
2)当你的应用程序进入onPause() - > onResume()时 - 适当地使用这个阶段暂停/恢复你的连接或关闭/打开它们.
使用完毕后立即关闭数据库是一种很好的做法.数据库被缓存,因此关闭它并在需要时使用getWritableDatabase()/ getReadableDatabase()再次重新获取实例时没有问题
从官方文档: "成功打开后,数据库被缓存,因此每次需要写入数据库时都可以调用此方法.(确保在不再需要数据库时调用close()."
还要记住,如果SQLiteOpenHelper缓存并跟踪SQLiteDatabase的所有打开实例,它基本上意味着如果不保留开放数据库连接,则不必在SQLiteOpenHelper上调用close.
我建议您在停止使用它们后立即关闭所有游标和数据库.总是尝试强制执行try/catch /查询操作,并尝试"finally块"来调用对象上的close方法.
归档时间: |
|
查看次数: |
12401 次 |
最近记录: |