我的应用程序有一些活动和服务,它们都可以从同一个SQLite数据库读取和写入。为了保持它们的同步,我使用SQLiteDatabase对象的单例实例。
但是,每隔一段时间,我就会从客户那里通过Android Market控制台获得堆栈跟踪,并显示某些东西试图访问已经关闭的数据库。
目前,我的活动总是在onCreate和onPause(如果是isFinishing)中打开和关闭数据库。当一个Activity打开数据库时,它还会切换一个静态布尔值,以防止我的服务关闭它。我的服务(基于AlarmManager定期运行)始终打开,并在读取所需内容后立即关闭它。但是,如果Activity中的静态布尔值已打开,则服务不会关闭数据库。
我不确定我的洞在哪里,以及我是否真的需要一直关闭数据库,如果我有服务定期使用它。
答案 0 :(得分:0)
您应该使用onDestroy
方法关闭数据库以避免此问题。
确实有时onDestroy
没有被调用,但这并不重要。如果操作系统取消了您的流程,那么无论如何都会清理所有资源。